126 Commits

Author SHA1 Message Date
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
7b6438dce5 fix some background-theme stuff 2021-07-07 21:55:35 -04: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
72 changed files with 3548 additions and 2592 deletions

View File

@@ -2,251 +2,251 @@ module.exports = {
env: {
browser: true,
es6: true,
webextensions: true
webextensions: true,
},
extends: 'eslint:recommended',
extends: "eslint:recommended",
globals: {
Atomics: 'readonly',
SharedArrayBuffer: 'readonly'
Atomics: "readonly",
SharedArrayBuffer: "readonly",
},
parserOptions: {
ecmaVersion: 2018
ecmaVersion: 2018,
},
rules: {
'accessor-pairs': 'error',
'array-bracket-newline': 'error',
'array-bracket-spacing': ['error', 'never'],
'array-callback-return': 'error',
'array-element-newline': 'error',
'arrow-body-style': 'error',
'arrow-parens': ['error', 'as-needed'],
'arrow-spacing': [
'error',
"accessor-pairs": "error",
"array-bracket-newline": "error",
"array-bracket-spacing": ["error", "never"],
"array-callback-return": "error",
"array-element-newline": "error",
"arrow-body-style": "error",
"arrow-parens": ["error", "as-needed"],
"arrow-spacing": [
"error",
{
after: true,
before: true
}
before: true,
},
],
'block-scoped-var': 'off',
'block-spacing': 'error',
'brace-style': ['error', '1tbs'],
'callback-return': 'error',
camelcase: 'off',
'capitalized-comments': 'off',
'class-methods-use-this': 'error',
'comma-dangle': 'error',
'comma-spacing': [
'error',
"block-scoped-var": "off",
"block-spacing": "error",
"brace-style": ["error", "1tbs"],
"callback-return": "error",
camelcase: "off",
"capitalized-comments": "off",
"class-methods-use-this": "error",
"comma-dangle": "error",
"comma-spacing": [
"error",
{
after: true,
before: false
}
before: false,
},
],
'comma-style': ['error', 'last'],
complexity: 'error',
'computed-property-spacing': ['error', 'never'],
'consistent-return': 'off',
'consistent-this': 'error',
curly: 'error',
'default-case': 'error',
'default-param-last': 'error',
'dot-location': 'off',
'dot-notation': 'off',
'eol-last': 'error',
eqeqeq: 'off',
'func-call-spacing': 'error',
'func-name-matching': 'error',
'func-names': 'off',
'func-style': 'off',
'function-call-argument-newline': ['error', 'consistent'],
'function-paren-newline': 'off',
'generator-star-spacing': 'error',
'global-require': 'error',
'guard-for-in': 'error',
'handle-callback-err': 'error',
'id-blacklist': 'error',
'id-length': 'error',
'id-match': 'error',
'implicit-arrow-linebreak': ['error', 'beside'],
indent: 'off',
'indent-legacy': 'off',
'init-declarations': 'error',
'jsx-quotes': 'error',
'key-spacing': 'error',
'keyword-spacing': [
'error',
"comma-style": ["error", "last"],
complexity: "error",
"computed-property-spacing": ["error", "never"],
"consistent-return": "off",
"consistent-this": "error",
curly: "error",
"default-case": "error",
"default-param-last": "error",
"dot-location": "off",
"dot-notation": "off",
"eol-last": "error",
eqeqeq: "off",
"func-call-spacing": "error",
"func-name-matching": "error",
"func-names": "off",
"func-style": "off",
"function-call-argument-newline": ["error", "consistent"],
"function-paren-newline": "off",
"generator-star-spacing": "error",
"global-require": "error",
"guard-for-in": "error",
"handle-callback-err": "error",
"id-blacklist": "error",
"id-length": "error",
"id-match": "error",
"implicit-arrow-linebreak": ["error", "beside"],
indent: "off",
"indent-legacy": "off",
"init-declarations": "error",
"jsx-quotes": "error",
"key-spacing": "error",
"keyword-spacing": [
"error",
{
after: true,
before: true
}
before: true,
},
],
'line-comment-position': 'error',
'linebreak-style': ['error', 'unix'],
'lines-around-comment': 'off',
'lines-around-directive': 'error',
'lines-between-class-members': 'error',
'max-classes-per-file': 'error',
'max-depth': 'error',
'max-len': 'error',
'max-lines': 'off',
'max-lines-per-function': 'off',
'max-nested-callbacks': 'error',
'max-params': 'error',
'max-statements': 'off',
'max-statements-per-line': 'error',
'multiline-comment-style': ['error', 'bare-block'],
'multiline-ternary': 'error',
'new-cap': 'off',
'new-parens': 'error',
'newline-after-var': 'off',
'newline-before-return': 'off',
'newline-per-chained-call': 'error',
'no-alert': 'error',
'no-array-constructor': 'error',
'no-await-in-loop': 'error',
'no-bitwise': 'error',
'no-buffer-constructor': 'error',
'no-caller': 'error',
'no-catch-shadow': 'error',
'no-confusing-arrow': 'error',
'no-console': 'off',
'no-continue': 'error',
'no-div-regex': 'error',
'no-duplicate-imports': 'error',
'no-else-return': 'off',
'no-empty-function': 'error',
'no-eq-null': 'error',
'no-eval': 'error',
'no-extend-native': 'error',
'no-extra-bind': 'error',
'no-extra-label': 'error',
'no-extra-parens': 'error',
'no-floating-decimal': 'error',
'no-implicit-coercion': 'error',
'no-implicit-globals': 'off',
'no-implied-eval': 'error',
'no-import-assign': 'error',
'no-inline-comments': 'error',
'no-inner-declarations': 'off',
'no-invalid-this': 'error',
'no-iterator': 'error',
'no-label-var': 'error',
'no-labels': 'error',
'no-lone-blocks': 'error',
'no-lonely-if': 'error',
'no-loop-func': 'error',
'no-magic-numbers': 'off',
'no-mixed-operators': 'error',
'no-mixed-requires': 'error',
'no-multi-assign': 'error',
'no-multi-spaces': 'error',
'no-multi-str': 'error',
'no-multiple-empty-lines': 'error',
'no-native-reassign': 'error',
'no-negated-condition': 'error',
'no-negated-in-lhs': 'error',
'no-nested-ternary': 'error',
'no-new': 'error',
'no-new-func': 'error',
'no-new-object': 'error',
'no-new-require': 'error',
'no-new-wrappers': 'error',
'no-octal-escape': 'error',
'no-param-reassign': 'error',
'no-path-concat': 'error',
'no-plusplus': 'error',
'no-process-env': 'error',
'no-process-exit': 'error',
'no-proto': 'error',
'no-restricted-globals': 'error',
'no-restricted-imports': 'error',
'no-restricted-modules': 'error',
'no-restricted-properties': 'error',
'no-restricted-syntax': 'error',
'no-return-assign': 'error',
'no-return-await': 'error',
'no-script-url': 'error',
'no-self-compare': 'error',
'no-sequences': 'error',
'no-shadow': 'error',
'no-spaced-func': 'error',
'no-sync': 'error',
'no-tabs': 'error',
'no-template-curly-in-string': 'error',
'no-ternary': 'error',
'no-throw-literal': 'error',
'no-trailing-spaces': 'error',
'no-undef-init': 'error',
'no-undefined': 'off',
'no-underscore-dangle': 'error',
'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',
'no-useless-concat': 'error',
'no-useless-constructor': 'error',
'no-useless-rename': 'error',
'no-useless-return': 'error',
'no-var': 'off',
'no-void': 'error',
'no-warning-comments': 'error',
'no-whitespace-before-property': 'error',
'nonblock-statement-body-position': 'error',
'object-curly-newline': 'error',
'object-curly-spacing': 'off',
'object-property-newline': 'error',
'object-shorthand': 'error',
'one-var': 'off',
'one-var-declaration-per-line': 'error',
'operator-assignment': 'error',
'operator-linebreak': 'error',
'padded-blocks': 'off',
'padding-line-between-statements': 'error',
'prefer-arrow-callback': 'off',
'prefer-const': 'off',
'prefer-destructuring': 'off',
'prefer-named-capture-group': 'error',
'prefer-numeric-literals': 'error',
'prefer-object-spread': 'error',
'prefer-promise-reject-errors': 'error',
'prefer-reflect': 'error',
'prefer-regex-literals': 'error',
'prefer-rest-params': 'error',
'prefer-spread': 'error',
'prefer-template': 'off',
'quote-props': 'off',
quotes: ['error', 'double'],
radix: 'error',
'require-await': 'error',
'require-jsdoc': 'off',
'require-unicode-regexp': 'error',
'rest-spread-spacing': 'error',
semi: 'error',
'semi-spacing': 'error',
'semi-style': ['error', 'last'],
'sort-imports': 'error',
'sort-keys': 'off',
'sort-vars': 'error',
'space-before-blocks': 'error',
'space-before-function-paren': 'off',
'space-in-parens': ['error', 'never'],
'space-infix-ops': 'error',
'space-unary-ops': 'error',
'spaced-comment': 'off',
strict: ['error', 'never'],
'switch-colon-spacing': 'error',
'symbol-description': 'error',
'template-curly-spacing': 'error',
'template-tag-spacing': 'error',
'unicode-bom': ['error', 'never'],
'valid-jsdoc': 'error',
'vars-on-top': 'off',
'wrap-iife': 'error',
'wrap-regex': 'error',
'yield-star-spacing': 'error',
yoda: ['error', 'never']
}
"line-comment-position": "error",
"linebreak-style": ["error", "unix"],
"lines-around-comment": "off",
"lines-around-directive": "error",
"lines-between-class-members": "error",
"max-classes-per-file": "error",
"max-depth": "error",
"max-len": "error",
"max-lines": "off",
"max-lines-per-function": "off",
"max-nested-callbacks": "error",
"max-params": "error",
"max-statements": "off",
"max-statements-per-line": "error",
"multiline-comment-style": ["error", "bare-block"],
"multiline-ternary": "error",
"new-cap": "off",
"new-parens": "error",
"newline-after-var": "off",
"newline-before-return": "off",
"newline-per-chained-call": "error",
"no-alert": "error",
"no-array-constructor": "error",
"no-await-in-loop": "error",
"no-bitwise": "error",
"no-buffer-constructor": "error",
"no-caller": "error",
"no-catch-shadow": "error",
"no-confusing-arrow": "error",
"no-console": "off",
"no-continue": "error",
"no-div-regex": "error",
"no-duplicate-imports": "error",
"no-else-return": "off",
"no-empty-function": "error",
"no-eq-null": "error",
"no-eval": "error",
"no-extend-native": "error",
"no-extra-bind": "error",
"no-extra-label": "error",
"no-extra-parens": "error",
"no-floating-decimal": "error",
"no-implicit-coercion": "error",
"no-implicit-globals": "off",
"no-implied-eval": "error",
"no-import-assign": "error",
"no-inline-comments": "error",
"no-inner-declarations": "off",
"no-invalid-this": "error",
"no-iterator": "error",
"no-label-var": "error",
"no-labels": "error",
"no-lone-blocks": "error",
"no-lonely-if": "error",
"no-loop-func": "error",
"no-magic-numbers": "off",
"no-mixed-operators": "error",
"no-mixed-requires": "error",
"no-multi-assign": "error",
"no-multi-spaces": "error",
"no-multi-str": "error",
"no-multiple-empty-lines": "error",
"no-native-reassign": "error",
"no-negated-condition": "error",
"no-negated-in-lhs": "error",
"no-nested-ternary": "error",
"no-new": "error",
"no-new-func": "error",
"no-new-object": "error",
"no-new-require": "error",
"no-new-wrappers": "error",
"no-octal-escape": "error",
"no-param-reassign": "error",
"no-path-concat": "error",
"no-plusplus": "error",
"no-process-env": "error",
"no-process-exit": "error",
"no-proto": "error",
"no-restricted-globals": "error",
"no-restricted-imports": "error",
"no-restricted-modules": "error",
"no-restricted-properties": "error",
"no-restricted-syntax": "error",
"no-return-assign": "error",
"no-return-await": "error",
"no-script-url": "error",
"no-self-compare": "error",
"no-sequences": "error",
"no-shadow": "error",
"no-spaced-func": "error",
"no-sync": "error",
"no-tabs": "error",
"no-template-curly-in-string": "error",
"no-ternary": "error",
"no-throw-literal": "error",
"no-trailing-spaces": "error",
"no-undef-init": "error",
"no-undefined": "off",
"no-underscore-dangle": "error",
"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",
"no-useless-concat": "error",
"no-useless-constructor": "error",
"no-useless-rename": "error",
"no-useless-return": "error",
"no-var": "off",
"no-void": "error",
"no-warning-comments": "error",
"no-whitespace-before-property": "error",
"nonblock-statement-body-position": "error",
"object-curly-newline": "error",
"object-curly-spacing": "off",
"object-property-newline": "error",
"object-shorthand": "error",
"one-var": "off",
"one-var-declaration-per-line": "error",
"operator-assignment": "error",
"operator-linebreak": "error",
"padded-blocks": "off",
"padding-line-between-statements": "error",
"prefer-arrow-callback": "off",
"prefer-const": "off",
"prefer-destructuring": "off",
"prefer-named-capture-group": "error",
"prefer-numeric-literals": "error",
"prefer-object-spread": "error",
"prefer-promise-reject-errors": "error",
"prefer-reflect": "error",
"prefer-regex-literals": "error",
"prefer-rest-params": "error",
"prefer-spread": "error",
"prefer-template": "off",
"quote-props": "off",
quotes: ["error", "double"],
radix: "error",
"require-await": "error",
"require-jsdoc": "off",
"require-unicode-regexp": "error",
"rest-spread-spacing": "error",
semi: "error",
"semi-spacing": "error",
"semi-style": ["error", "last"],
"sort-imports": "error",
"sort-keys": "off",
"sort-vars": "error",
"space-before-blocks": "error",
"space-before-function-paren": "off",
"space-in-parens": ["error", "never"],
"space-infix-ops": "error",
"space-unary-ops": "error",
"spaced-comment": "off",
strict: ["error", "never"],
"switch-colon-spacing": "error",
"symbol-description": "error",
"template-curly-spacing": "error",
"template-tag-spacing": "error",
"unicode-bom": ["error", "never"],
"valid-jsdoc": "error",
"vars-on-top": "off",
"wrap-iife": "error",
"wrap-regex": "error",
"yield-star-spacing": "error",
yoda: ["error", "never"],
},
};

View File

@@ -32,16 +32,16 @@ ls:
ls -lah $(PREFIX)/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}
clean: rc clean-artifacts
rm -fr ../i2psetproxy.js.zip ../i2p_proxy*.xpi ../i2p*.xpi *.torrent #../i2psetproxy.js_*.*
rm -fr ../i2psetproxy.js.zip ../i2p_proxy*.xpi *.torrent #../i2psetproxy.js_*.*
## EVEN RELEASES are AMO RELEASES
## ODD RELEASES are SELFHOSTED RELEASES
MOZ_VERSION=0.82
VERSION=0.81
MOZ_VERSION=0.108
VERSION=0.107
## INCREMENT THIS EVERY TIME YOU DO A RELEASE
LAST_VERSION=0.79
LAST_VERSION=0.105
YELLOW=F7E59A
ORANGE=FFC56D
@@ -64,7 +64,7 @@ amo-readme:
sed 's|</h3>|</strong>|g' | \
grep -v '<img' > amo-index.html
MAGNET=`torrent2magnet i2ppb@eyedeekay.github.io.xpi.torrent`
MAGNET=`rhash --magnet i2ppb@eyedeekay.github.io.xpi.torrent`
index:
@echo "<!DOCTYPE html>" > index.html
@@ -98,15 +98,15 @@ version:
sed -i 's|7647|7657|g' *.js* torrent/*.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
sed -si 's|$(shell grep $(LAST_VERSION) _locales/en/messages.json)| "message": "$(VERSION)",|g' _locales/en/messages.json; true
sed -si 's|$(shell grep $(MOZ_VERSION) _locales/en/messages.json)| "message": "$(VERSION)",|g' _locales/en/messages.json; true
find . -name 'messages.json' -exec sed -i 's|$(LAST_VERSION)|$(VERSION)|g' {} \;
find . -name 'messages.json' -exec sed -i 's|$(MOZ_VERSION)|$(VERSION)|g' {} \;
moz-version:
sed -i 's|7647|7657|g' *.js* torrent/*.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
sed -si 's|$(shell grep $(LAST_VERSION) _locales/en/messages.json)| "message": "$(MOZ_VERSION)",|g' _locales/en/messages.json; true
sed -si 's|$(shell grep $(VERSION) _locales/en/messages.json)| "message": "$(MOZ_VERSION)",|g' _locales/en/messages.json; true
find . -name 'messages.json' -exec sed -i 's|$(LAST_VERSION)|$(MOZ_VERSION)|g' {} \;
find . -name 'messages.json' -exec sed -i 's|$(VERSION)|$(MOZ_VERSION)|g' {} \;
rhz-version:
sed -i 's|$(shell grep "\"version\": " manifest.json)| \"version\": \"$(VERSION)1\",|g' manifest.json
@@ -168,7 +168,7 @@ 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."
$(HOME)/node_modules/web-ext-submit/extender.sh --channel unlisted --config-discovery false --api-key $(WEB_EXT_API_KEY) --api-secret $(WEB_EXT_API_SECRET)
$(HOME)/node_modules/web-ext/bin/web-ext sign --channel unlisted --config-discovery false --api-key $(WEB_EXT_API_KEY) --api-secret $(WEB_EXT_API_SECRET)
make copyss
sleep 5
@@ -182,7 +182,7 @@ moz-submit: moz-version
@echo "to the Makefile under the variables WEB_EXT_API_KEY and WEB_EXT_API_SECRET."
mv manifest.json .manifest.json
grep -v update_url .manifest.json > manifest.json
web-ext sign --channel listed --config-discovery false --api-key $(WEB_EXT_API_KEY) --api-secret $(WEB_EXT_API_SECRET); true
$(HOME)/node_modules/web-ext/bin/web-ext sign --channel listed --config-discovery false --api-key $(WEB_EXT_API_KEY) --api-secret $(WEB_EXT_API_SECRET); true
sleep 5
mv .manifest.json manifest.json
@@ -286,6 +286,9 @@ fmt-js:
fixjsstyle manifest.json
#find . -path ./node_modules -prune -o -name '*.json' -exec fixjsstyle --write {} \;
fmt-prettier:
find . -name '*.js*' -exec $(HOME)/node_modules/.bin/prettier -w {} \;
lint:
gjslint *.js; true
@@ -325,7 +328,7 @@ upload-updatemanifest:
gothub upload -R -u eyedeekay -r I2P-in-Private-Browsing-Mode-Firefox -t docs -n "updateManifest.json" -f updateManifest.json
webext:
web-ext run -u "about:devtools-toolbox?type=extension&id=i2ppb%40eyedeekay.github.io"
$(HOME)/node_modules/web-ext/bin/web-ext run --firefox /usr/bin/firefox -u "about:devtools-toolbox?type=extension&id=i2ppb%40eyedeekay.github.io"
snark-mirror:
http_proxy=http://127.0.0.1:4444 wget -c -O ../i2psnark-rpc.su3 http://stats.i2p/i2p/plugins/i2psnark-rpc.su3
@@ -336,7 +339,30 @@ snark-mirror:
seed:
cp -v "./i2ppb-$(VERSION)@eyedeekay.github.io.xpi.torrent" "$(HOME)/.i2p/i2psnark"
cp -v "../i2ppb-$(VERSION)@eyedeekay.github.io.xpi" "$(HOME)/.i2p/i2psnark"
wire:
cp -v "./i2ppb-$(VERSION)@eyedeekay.github.io.xpi.torrent" "$(HOME)/i2p/MuWireDownloads/"
cp -v "../i2ppb-$(VERSION)@eyedeekay.github.io.xpi" "$(HOME)/i2p/MuWireDownloads/"
ndtest:
$(HOME)/node_modules/web-ext/bin/web-ext run --firefox /usr/bin/firefox -u about:debugging \
-u http://127.0.0.1:7657/home \
-u http://127.0.0.1:7657/i2ptunnel \
-u http://127.0.0.1:7657/i2psnark \
-u http://127.0.0.1:7657/webmail \
-u http://127.0.0.1:7657/MuWire \
-u http://idk.i2p/video.html \
-u http://idk.i2p \
-u http://stats.i2p \
-u http://tvndxxkxcstbtqfxg7iigco6bj22ff2y6jxikmk7wqkyadkhrd4a.b32.i2p \
-u https://ramble.pw \
-u https://ramble.pw/f/i2p \
lht-test:
$(HOME)/node_modules/web-ext/bin/web-ext run --firefox /usr/bin/firefox -u about:debugging \
-u http://localhost:7657/home \
-u http://localhost:7657/i2ptunnel \
-u http://localhost:7657/i2psnark \
-u http://localhost:7657/webmail \
-u http://localhost:7657/MuWire/ \
-u http://idk.i2p

View File

@@ -115,15 +115,16 @@ Usage:
the use of I2PSnark as a peer-to-peer delivery mechanism for media files.
* ![Visiting i2psnark](i2psnark.png)
* ![Monitoring torrents](transmissionrpc.png)
* ![Distribute your site as a torrent.](x-i2p-torrentlocation.png)
* [Started] **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.
* [Started] **Provide** alternate, in-I2P destinations for web sites that want to
mirror their content within I2P.
* [Started] **Enhance** the I2P browsing experience by allowing site developers
* [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

View File

@@ -3,6 +3,10 @@
"message": "I2P In Private Browsing",
"description": "Name of the extension."
},
"extensionNameVariant": {
"message": "I2P In Private Browsing - Rhizome Variant",
"description": "Name of the extension."
},
"toopieName": {
"message": "toopie.html",
"description": "Name of the sidebar."
@@ -16,7 +20,7 @@
"description": "Description of the extension."
},
"extensionVersion": {
"message": "0.77",
"message": "0.107",
"description": "Version of the extension."
},
"proxyFailedStatus": {
@@ -159,12 +163,28 @@
"message": "Web Browser (Private)",
"description": "Preface for the browser titlebar"
},
"localPreface": {
"message": "Localhost Browser",
"ircPreface": {
"message": "Dispatch IRC",
"description": "Preface for the browser titlebar"
},
"localPrefacePrivate": {
"message": "Localhost Browser (Private)",
"ircPrefacePrivate": {
"message": "Dispatch IRC (Private)",
"description": "Preface for the browser titlebar"
},
"blogPreface": {
"message": "Blog",
"description": "Preface for the browser titlebar"
},
"blogPrefacePrivate": {
"message": "Blog (Private)",
"description": "Preface for the browser titlebar"
},
"botePreface": {
"message": "I2P-Bote Mail",
"description": "Preface for the browser titlebar"
},
"botePrefacePrivate": {
"message": "I2P-Bote Mail (Private)",
"description": "Preface for the browser titlebar"
},
"routerPreface": {

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

@@ -0,0 +1,314 @@
{
"extensionName": {
"message": "I2P en navegación privada",
"description": "Nombre de la extensión."
},
"extensionNameVariant": {
"message": "I2P en navegación privada - Rhizome",
"description": "Nombre de la extensión."
},
"toopieName": {
"message": "toopie.html",
"description": "Nombre de la barra lateral."
},
"toopieTLS": {
"message": "Propiedades del sitio",
"description": "Nombre del panel de seguridad."
},
"extensionDescription": {
"message": "Su navegador ahora está configurado para usar I2P.",
"description": "Descripción de la extensión."
},
"extensionVersion": {
"message": "0,107",
"description": "Versión de la extensión."
},
"proxyFailedStatus": {
"message": "El proxy no está listo",
"description": "Estado fallido del proxy."
},
"proxySuccessStatus": {
"message": "El proxy está listo",
"description": "Estado fallido del proxy."
},
"controlHeader": {
"message": "Control",
"description": "Título del panel de control."
},
"controlExplain": {
"message": "Estos controles se utilizan para personalizar su experiencia de navegación I2P",
"description": "Introduce el panel de control."
},
"clearData": {
"message": "Borrar datos de navegación:",
"description": "Elemento de menú Borrar datos de navegación."
},
"clearDesc": {
"message": "Use esto para borrar sus datos de navegación I2P.",
"description": "Borrar descripción de la acción de datos de navegación."
},
"enableWebRTC": {
"message": "¿Habilitar WebRTC con proxy?",
"description": "Etiqueta de casilla de verificación de WebRTC."
},
"rtcDesc": {
"message": "WebRTC está deshabilitado de forma predeterminada, pero puede volver a encenderlo y forzarlo para que respete el proxy. Si es un usuario de la extensión del navegador Snowflake, esta opción está deshabilitada y WebRTC está activado de forma predeterminada.",
"description": "Descripción de la acción de WebRTC"
},
"disableHistory": {
"message": "¿Deshabilitar el historial en las pestañas I2P?",
"description": "Etiqueta de casilla de verificación del historial."
},
"histDesc": {
"message": "El historial se borra automáticamente cuando se cierran las pestañas de I2P. Si desea borrar el historial sobre la marcha, marque esta casilla.",
"description": "Descripción de la acción del historial"
},
"applicationHeader": {
"message": "Aplicaciones",
"description": "Encabezado de la sección de aplicaciones."
},
"applicationExplain": {
"message": "Estas aplicaciones funcionan con I2P directamente para brindarles seguridad y privacidad.",
"description": "Descripción de la sección de aplicación."
},
"windowVisitConsole": {
"message": "Consola del enrutador:",
"description": "Etiqueta de la consola del enrutador."
},
"routerConsole": {
"message": "El punto de entrada para todas las demás aplicaciones I2P es la consola del enrutador I2P. Para visitarla, haga clic aquí.",
"description": "Descripción de la consola del enrutador."
},
"windowVisitHomepage": {
"message": "Página de inicio:",
"description": "Página de inicio para la etiqueta de extensión."
},
"abouthome": {
"message": "Para obtener más información sobre esta extensión, visite esta página.",
"description": "Descripción de la página del botón de extensión."
},
"windowVisitHelppage": {
"message": "Página de ayuda:",
"description": "Página de ayuda para la etiqueta de extensión."
},
"help": {
"message": "Para obtener más información sobre esta extensión, visite esta página.",
"description": "Descripción de la página del botón de extensión."
},
"windowVisitI2ptunnel": {
"message": "Administrador de servicios ocultos:",
"description": "Título para i2ptunnel"
},
"i2ptunnel": {
"message": "I2P tiene una interfaz basada en web para configurar servicios .i2p como sitios web que puede configurar.",
"description": "Descripción de i2ptunnel"
},
"windowVisitSusimail": {
"message": "Correo electrónico:",
"descripción": "Título del correo electrónico"
},
"susimail": {
"message": "I2P también incluye un cliente de correo web que se puede utilizar para acceder al correo electrónico in-I2P.",
"description": "Descripción para correo electrónico"
},
"windowVisitSnark": {
"message": "Bittorrent:",
"description": "Título para Bittorrent"
},
"snark": {
"message": "I2P es capaz de compartir archivos de igual a igual de forma anónima utilizando la aplicación bittorrent incorporada.",
"description": "Descripción de Bittorrent"
},
"windowVisitSources": {
"message": "Código fuente de extensión:",
"description": "Título del enlace del código fuente"
},
"sources": {
"message": "Examine el código fuente aquí",
"description": "Descripción del enlace del código fuente"
},
"windowVisitWebPage": {
"message": "Página de inicio de la extensión:",
"description": "Visita la página de inicio de la extensión en Github"
},
"homepage": {
"message": "Hay más información disponible aquí",
"description": "Encontrar más información"
},
"windowVisitReleases": {
"message": "Extension Releases:",
"description": "Visite la página de lanzamiento"
},
"releases": {
"message": "Compruebe si hay nuevas versiones aquí",
"description": "Descripción de la nueva página de lanzamiento"
},
"titlePreface": {
"message": "Navegador I2P",
"description": "Prefacio de la barra de título del navegador"
},
"titlePrefacePrivate": {
"message": "Navegador I2P (privado)",
"description": "Prefacio de la barra de título del navegador"
},
"extensionPreface": {
"message": "Gestión I2P",
"description": "Prefacio de la barra de título del navegador"
},
"webPreface": {
"message": "Navegador web",
"description": "Prefacio de la barra de título del navegador"
},
"webPrefacePrivate": {
"message": "Navegador web (privado)",
"description": "Prefacio de la barra de título del navegador"
},
"ircPreface": {
"message": "Envío de IRC",
"description": "Prefacio de la barra de título del navegador"
},
"ircPrefacePrivate": {
"message": "Despacho de IRC (privado)",
"description": "Prefacio de la barra de título del navegador"
},
"blogPreface": {
"message": "Blog",
"description": "Prefacio de la barra de título del navegador"
},
"blogPrefacePrivate": {
"message": "Blog (Private)",
"description": "Prefacio de la barra de título del navegador"
},
"botePreface": {
"message": "I2P-Bote Mail",
"description": "Prefacio de la barra de título del navegador"
},
"botePrefacePrivate": {
"message": "I2P-Bote Mail (privado)",
"description": "Prefacio de la barra de título del navegador"
},
"routerPreface": {
"message": "Consola del enrutador",
"description": "Prefacio de la barra de título del navegador"
},
"routerPrefacePrivate": {
"message": "Consola del enrutador (privada)",
"description": "Prefacio de la barra de título del navegador"
},
"torrentPreface": {
"message": "Bittorrent",
"description": "Prefacio de la barra de título del navegador"
},
"torrentPrefacePrivate": {
"message": "Bittorrent (privado)",
"description": "Prefacio de la barra de título del navegador"
},
"mailPreface": {
"message": "Correo web",
"description": "Prefacio de la barra de título del navegador"
},
"mailPrefacePrivate": {
"message": "Correo web (privado)",
"description": "Prefacio de la barra de título del navegador"
},
"i2ptunnelPreface": {
"message": "Administrador de servicios ocultos",
"description": "Prefacio de la barra de título del navegador"
},
"i2ptunnelPrefacePrivate": {
"message": "Administrador de servicios ocultos (privado)",
"description": "Prefacio de la barra de título del navegador"
},
"muwirePreface": {
"message": "MuWire",
"description": "Prefacio de la barra de título del navegador"
},
"muwirePrefacePrivate": {
"message": "MuWire (privado)",
"description": "Prefacio de la barra de título del navegador"
},
"resetMessage": {
"message": "Reset Tunnel",
"description": "Mensaje para el botón Reset Tunnel"
},
"infoTitle": {
"message": "Ayuda I2P",
"description": "Título del menú de ayuda"
},
"infoMessage": {
"message": "¡Ahora puede navegar libremente por eepWeb! Su navegador ahora está configurado para navegar de forma anónima en la red I2P. Mientras navega, su tráfico se enrutará a través de otros nodos de red para disfrazar su origen, tanto desde el servidor de los propios nodos. ",
"description": "Mensaje de ayuda"
},
"helpMessage": {
"message": "Obtén ayuda adicional",
"description": "Mensaje de ayuda"
},
"newsMessage": {
"message": "Visite el blog de I2P para conocer las últimas novedades sobre i2p.",
"description": "Mensaje de ayuda"
},
"forumMessage": {
"message": "Visite el Foro I2P para obtener más información o solicitar ayuda",
"description": "Mensaje de ayuda"
},
"proxyHelpText": {
"message": "Configure aquí su proxy I2P",
"description": "Ayuda para configurar las opciones del botón Reset Tunnel"
},
"hostText": {
"message": "Anfitrión:",
"description": "Host para el proxy HTTP o SOCKS5"
},
"portText": {
"message": "Puerto:",
"description": "Puerto para el proxy HTTP o SOCKS5"
},
"controlHelpText": {
"message": "Configure aquí la consola de su enrutador.",
"description": "Ayuda para configurar las opciones del botón Reset Tunnel"
},
"controlHostText": {
"message": "Host de control:",
"description": "Host para la consola del enrutador"
},
"controlPortText": {
"message": "Puerto de control:",
"description": "Puerto para la consola del enrutador"
},
"controlHostValue": {
"message": "127.0.0.1",
"description": "Host para la consola del enrutador"
},
"controlPortValue": {
"message": "7657",
"description": "Puerto para la consola del enrutador"
},
"isBase32": {
"message": "Dirección con formato I2P Base32",
"description": "Mensaje para el panel de información del sitio base32"
},
"isHostName": {
"message": "Nombre de host de salto I2P",
"description": "Mensaje para el nombre de host del panel de información del sitio"
},
"siteLabel": {
"message": "Dirección / Información del sitio:",
"description": "Etiqueta para la información del sitio i2p"
},
"certLabel": {
"message": "Información del certificado:",
"description": "Etiqueta para la información del certificado"
},
"certAbsent": {
"message": "Este sitio no está usando HTTPS. I2P aún lo verifica criptográficamente.",
"description": "Contenido de la información del certificado si no está"
},
"certPresent": {
"message": "Este sitio utiliza HTTPS. HTTPS sobre I2P es experimental y requiere certificados autofirmados o autorizaciones raíz alternativas.",
"description": "Contenido de la información del certificado si está presente"
},
"protocolHandlerValue": {
"message": "http://127.0.0.1:7657/i2psnark/?nofilter_newURL=%s&action=Add&foo=Add+torrent",
"description": "Valor para el controlador de protocolo magnético"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 314 KiB

After

Width:  |  Height:  |  Size: 309 KiB

View File

@@ -1,19 +1,33 @@
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');
var localpref = chrome.i18n.getMessage('localPreface');
var localprefpriv = chrome.i18n.getMessage('localPrefacePrivate');
var extensionpref = chrome.i18n.getMessage('extensionPreface');
var muwirepref = chrome.i18n.getMessage('muwirePreface');
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");
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");
function onError(err) {
console.log("(background)", err);
}
function onContextGotLog(contexts) {
if (contexts != null) {
console.log(contexts);
}
}
function onContextsGot(contexts) {
var ids = [];
@@ -21,13 +35,22 @@ function onContextsGot(contexts) {
console.log(`Name : ${context.name}`);
ids.push(context.name);
}
console.log('Checking new contexts');
console.log("Checking new contexts");
if (ids.indexOf(titlepref) == -1) {
browser.contextualIdentities
.create({
name: titlepref,
color: 'orange',
icon: 'fingerprint'
color: "orange",
icon: "fingerprint",
})
.then(onCreated, onNotCreated);
}
if (ids.indexOf(blogpref) == -1) {
browser.contextualIdentities
.create({
name: blogpref,
color: "pink",
icon: "pet",
})
.then(onCreated, onNotCreated);
}
@@ -35,8 +58,8 @@ function onContextsGot(contexts) {
browser.contextualIdentities
.create({
name: webpref,
color: 'red',
icon: 'circle'
color: "red",
icon: "circle",
})
.then(onCreated, onNotCreated);
}
@@ -44,8 +67,8 @@ function onContextsGot(contexts) {
browser.contextualIdentities
.create({
name: routerpref,
color: 'blue',
icon: 'briefcase'
color: "blue",
icon: "briefcase",
})
.then(onCreated, onNotCreated);
}
@@ -53,8 +76,8 @@ function onContextsGot(contexts) {
browser.contextualIdentities
.create({
name: tunnelpref,
color: 'green',
icon: 'tree'
color: "green",
icon: "tree",
})
.then(onCreated, onNotCreated);
}
@@ -62,8 +85,8 @@ function onContextsGot(contexts) {
browser.contextualIdentities
.create({
name: mailpref,
color: 'yellow',
icon: 'briefcase'
color: "yellow",
icon: "briefcase",
})
.then(onCreated, onNotCreated);
}
@@ -71,48 +94,57 @@ function onContextsGot(contexts) {
browser.contextualIdentities
.create({
name: torrentpref,
color: 'purple',
icon: 'chill'
color: "purple",
icon: "chill",
})
.then(onCreated, onNotCreated);
}
if (ids.indexOf(localpref) == -1) {
if (ids.indexOf(ircpref) == -1) {
browser.contextualIdentities
.create({
name: localpref,
color: 'red',
icon: 'fence'
name: ircpref,
color: "red",
icon: "vacation",
})
.then(onCreated, onNotCreated);
}
if (ids.indexOf(localpref) == -1) {
if (ids.indexOf(muwirepref) == -1) {
browser.contextualIdentities
.create({
name: muwirepref,
color: 'turquoise',
icon: 'gift'
color: "turquoise",
icon: "gift",
})
.then(onCreated, onNotCreated);
}
if (ids.indexOf(botepref) == -1) {
browser.contextualIdentities
.create({
name: botepref,
color: "blue",
icon: "fence",
})
.then(onCreated, onNotCreated);
}
}
function onContextsError() {
console.log('Error finding contextual identities, is the API enabled?');
console.log("Error finding contextual identities, is the API enabled?");
}
function onCreated(context) {
console.log(' ID:', context.cookieStoreId, 'created.');
console.log(" ID:", context.cookieStoreId, "created.");
}
function onNotCreated(context) {
console.log('ID:', context.cookieStoreId, 'not created.');
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') {
gettingInfo.then((got) => {
if (got.os != "android") {
browser.windows.onCreated.addListener(themeWindow);
browser.windows.onFocusChanged.addListener(themeWindow);
browser.windows.onRemoved.addListener(themeWindow);
@@ -124,8 +156,8 @@ gettingInfo.then(got => {
function themeWindowByTab(tabId) {
function tabWindow(tab) {
var gettingPlatformInfo = browser.runtime.getPlatformInfo();
gettingPlatformInfo.then(got => {
if (got.os == 'android') {
gettingPlatformInfo.then((got) => {
if (got.os == "android") {
let getwindow = browser.tabs.get(tab.tabId);
getwindow.then(themeWindow);
} else {
@@ -134,7 +166,7 @@ function themeWindowByTab(tabId) {
}
});
}
if (typeof tabId === 'number') {
if (typeof tabId === "number") {
let tab = browser.tabs.get(tabId);
tab.then(tabWindow);
} else {
@@ -154,134 +186,97 @@ function isEmpty(obj) {
return true;
}
let btheme = {
colors: {
frame: "#363A68",
toolbar: "#363A68",
},
};
let dtheme = {
colors: {
frame: "#4456B7",
toolbar: "#4456B7",
},
};
function themeWindow(window) {
// Check if the window is in private browsing
function onThemeError() {
console.log('theme color set error');
console.log("(theme) color set error");
browser.theme.reset();
}
function dynamicTheme() {
if (window.incognito) {
browser.theme.update(window.id, dtheme);
} else {
browser.theme.update(window.id, dtheme);
}
}
function browserTheme() {
console.log("(theme)Active in I2P window");
if (window.incognito) {
browser.theme.update(window.id, btheme);
} else {
browser.theme.update(window.id, btheme);
}
}
function unsetTheme() {
browser.theme.reset();
}
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: '#363A68',
toolbar: '#363A68'
}
});
} else {
browser.theme.update(window.id, {
colors: {
frame: '#363A68',
toolbar: '#363A68'
}
});
}
if (tabInfo[0].url.startsWith('https://')) {
browser.pageAction.setPopup({
tabId: tabInfo[0].id,
popup: 'security.html'
});
//console.log("(background) tabinfo", tabInfo[0].id)
browser.pageAction.show(tabInfo[0].id);
} else {
//browser.pageAction.hide(tabInfo[0].id);
}
browserTheme();
browser.pageAction.show(tabInfo[0].id);
} else if (context.name == routerpref) {
console.log('Active in Router Console window');
if (window.incognito) {
browser.theme.update(window.id, {
colors: {
frame: '#4456B7',
toolbar: '#4456B7'
}
});
} else {
browser.theme.update(window.id, {
colors: {
frame: '#4456B7',
toolbar: '#4456B7'
}
});
}
console.log("(theme) Active in Router Console window");
dynamicTheme();
} else if (context.name == tunnelpref) {
console.log('Active in Hidden Services Manager window');
if (window.incognito) {
browser.theme.update(window.id, {
colors: {
frame: '#4456B7',
toolbar: '#4456B7'
}
});
} else {
browser.theme.update(window.id, {
colors: {
frame: '#4456B7',
toolbar: '#4456B7'
}
});
}
console.log("(theme) Active in Hidden Services Manager window");
dynamicTheme();
} else if (context.name == mailpref) {
console.log('Active in Web Mail window');
if (window.incognito) {
browser.theme.update(window.id, {
colors: {
frame: '#4456B7',
toolbar: '#4456B7'
}
});
} else {
browser.theme.update(window.id, {
colors: {
frame: '#4456B7',
toolbar: '#4456B7'
}
});
}
console.log("(theme) Active in Web Mail window");
dynamicTheme();
} else if (context.name == torrentpref) {
console.log('Active in Bittorrent window');
if (window.incognito) {
browser.theme.update(window.id, {
colors: {
frame: '#4456B7',
toolbar: '#4456B7'
}
});
} else {
browser.theme.update(window.id, {
colors: {
frame: '#4456B7',
toolbar: '#4456B7'
}
});
}
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 == 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 MuWire window");
browser.theme.reset();
}
}
if (
tabInfo[0].cookieStoreId != 'firefox-default' &&
tabInfo[0].cookieStoreId != 'firefox-private'
tabInfo[0].cookieStoreId != "firefox-default" &&
tabInfo[0].cookieStoreId != "firefox-private"
) {
browser.contextualIdentities
.get(tabInfo[0].cookieStoreId)
.then(onContextGotTheme, onThemeError);
}else {
console.log('Not active in I2P window');
function unSetTheme(them) {
console.log('unsetting theme', them);
if (Object.keys(them).length > 0) {
browser.theme.update(window.id, them.originalTheme);
}else {
browser.theme.update(window.id, { colors: null });
}
}
browser.storage.local.get('originalTheme').then(unSetTheme, onError);
} else {
console.log("(theme) Not active in I2P window");
browser.theme.reset();
}
}
var querying = browser.tabs.query({
currentWindow: true,
active: true
active: true,
});
querying.then(logTabs, onThemeError);
}
@@ -289,167 +284,97 @@ function themeWindow(window) {
function setTitle(window) {
// Check if the window is in private browsing
function onContextError() {
console.log('Context Error');
console.log("Context Error");
}
function setTitle(title, privtitle) {
if (window.incognito) {
browser.windows.update(window.id, {
titlePreface: privtitle + ": ",
});
} else {
browser.windows.update(window.id, {
titlePreface: title + ": ",
});
}
}
function logTabs(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: webprefpriv + ' - '
});
} else {
browser.windows.update(window.id, {
titlePreface: webpref + ' - '
});
}
console.log("Active in I2P window");
setTitle(titlepref, titleprefpriv);
} else if (context.name == muwirepref) {
console.log("Active in MuWire window");
setTitle(muwirepref, muwireprefpriv);
} 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 + ': '
});
}
console.log("Active in Router Console window");
setTitle(routerpref, routerprefpriv);
} else if (context.name == botepref) {
console.log("Active in Bote window");
setTitle(botepref, boteprefpriv);
} 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 + ': '
});
}
console.log("Active in Hidden Services Manager window");
setTitle(tunnelpref, tunnelprefpriv);
} else if (context.name == mailpref) {
console.log('Active in I2P Web Mail window');
if (window.incognito) {
browser.windows.update(window.id, {
titlePreface: titleprefpriv + ' - ' + mailprefpriv + ': '
});
} else {
browser.windows.update(window.id, {
titlePreface: titlepref + ' - ' + mailpref + ': '
});
}
console.log("Active in I2P Web Mail window");
setTitle(mailpref, mailprefpriv);
} else if (context.name == blogpref) {
console.log("Active in I2P Blog window");
setTitle(blogpref, blogprefpriv);
} else if (context.name == torrentpref) {
console.log('Active in I2P Torrent window');
if (window.incognito) {
browser.windows.update(window.id, {
titlePreface: titleprefpriv + ' - ' + torrentprefpriv + ': '
});
} else {
browser.windows.update(window.id, {
titlePreface: titlepref + ' - ' + torrentpref + ': '
});
}
} else if (context.name == localpref) {
console.log('Active in Localhost window');
if (window.incognito) {
browser.windows.update(window.id, {
titlePreface: localprefpriv + ' - ' + localprefpriv + ': '
});
} else {
browser.windows.update(window.id, {
titlePreface: localpref + ' - ' + localpref + ': '
});
}
console.log("Active in I2P Torrent window");
setTitle(torrentpref, torrentprefpriv);
} else if (context.name == ircpref) {
console.log("Active in IRC window");
setTitle(ircpref, ircprefpriv);
}
}
if (
tabInfo[0].cookieStoreId != 'firefox-default' &&
tabInfo[0].cookieStoreId != 'firefox-private'
tabInfo[0].cookieStoreId != "firefox-default" &&
tabInfo[0].cookieStoreId != "firefox-private"
) {
browser.contextualIdentities
.get(tabInfo[0].cookieStoreId)
.then(onContextGotTitle, onContextError);
} else if (window.incognito) {
browser.windows.update(window.id, {
titlePreface: ''
titlePreface: "",
});
} else {
browser.windows.update(window.id, {
titlePreface: ''
titlePreface: "",
});
}
}
var querying = browser.tabs.query({
currentWindow: true,
active: true
active: true,
});
querying.then(logTabs, onContextError);
}
var gettingListenerInfo = browser.runtime.getPlatformInfo();
gettingListenerInfo.then(got => {
gettingListenerInfo.then((got) => {
function onPlatformError() {
console.log('Error finding platform info');
console.log("Error finding platform info");
}
if (got.os != 'android') {
if (got.os != "android") {
browser.tabs.onCreated.addListener(() => {
var getting = browser.windows.getCurrent({
populate: true
populate: true,
});
getting.then(setTitle, onPlatformError);
});
browser.tabs.onActivated.addListener(() => {
var getting = browser.windows.getCurrent({
populate: true
populate: true,
});
getting.then(setTitle, onPlatformError);
});
}
});
function handleUpdated(updateInfo) {
function maybeSet(them){
console.log("original theme found:", them, Object.keys(them).length)
try{
if ((Object.keys(them).length == 0) || them.originalTheme.colors == null && them.originalTheme.images == null && them.originalTheme.properties == null) {
if (updateInfo.theme.colors.frame != '#4456B7' && updateInfo.theme.colors.frame != '#363A68') {
function onSet(){
console.log("stored theme:", updateInfo.theme)
}
if (updateInfo.theme.colors != null || updateInfo.theme.images != null || updateInfo.theme.properties != null ) {
console.log("storing theme:", updateInfo.theme)
browser.storage.local.set({"originalTheme": updateInfo.theme}).then(onSet, onError)
}
}
}else{
console.log("keeping stored theme:", them)
}
}catch{
console.log("theme storage error")
}
}
browser.storage.local.get("originalTheme").then(maybeSet, onError);
}
browser.theme.onUpdated.addListener(handleUpdated);
function handleClick() {
console.log("Opening page action");
browser.pageAction.openPopup();
@@ -499,3 +424,41 @@ browser.webRequest.onHeadersReceived.addListener(
{ urls: ["<all_urls>"] },
["blocking", "responseHeaders"]
);
function onClosedWindowCheck() {
var getContext = browser.contextualIdentities.query({ name: titlepref });
function checkTabs(ctx) {
for (let context in ctx) {
function conditionallyDelete(tabs) {
if (tabs.length == 0) {
browser.contextualIdentities.remove(context.cookieStoreId);
}
}
var tabs = browser.tabs.query({ cookieStoreId: context.cookieStoreId });
tabs.then(conditionallyDelete, onError);
}
}
getContext.then(checkTabs, onError);
}
function onOpenedWindowCheck() {
var getContext = browser.contextualIdentities.query({ name: titlepref });
function checkTabs(ctx) {
for (let context in ctx) {
function conditionallyDelete(tabs) {
if (tabs.length == 0) {
browser.contextualIdentities.remove(context.cookieStoreId);
}
}
var tabs = browser.tabs.query({ cookieStoreId: context.cookieStoreId });
tabs.then(conditionallyDelete, onError);
}
}
getContext.then(checkTabs, onError);
}
onOpenedWindowCheck();
browser.tabs.onRemoved.addListener(onClosedWindowCheck);
browser.windows.onRemoved.addListener(onClosedWindowCheck);
browser.windows.onCreated.addListener(onOpenedWindowCheck);

View File

@@ -1,213 +1,245 @@
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 port = info.value.http.split(':')[1];
if (port == '7644') {
let createRhizomeBookmark = browser.bookmarks.create({
url: 'about:I2p',
title: 'I2P Extension Home Page',
parentId: bookmarkToolbar[0].id
});
createRhizomeBookmark.then(onCreated);
} else {
let createBookmark = browser.bookmarks.create({
url: browser.runtime.getURL('home.html'),
title: 'I2P Extension Home Page',
parentId: bookmarkToolbar[0].id
});
createBookmark.then(onCreated);
function bookmarksSetup() {
var gettingInfo = browser.runtime.getPlatformInfo();
gettingInfo.then((got) => {
if (got.os != "android") {
function bookmarks(bookmarkToolbar) {
console.log("(bookmarks)", bookmarkToolbar);
console.log("Setting up bookmark toolbar", bookmarkToolbar);
function bookHome(bookmarkItems) {
if (!bookmarkItems.length) {
function gotProxyInfo(info) {
let port = info.value.http.split(":")[1];
if (port == "7644") {
let createRhizomeBookmark = browser.bookmarks.create({
url: "about:I2p",
title: "I2P Extension Home Page",
parentId: bookmarkToolbar[0].id,
});
createRhizomeBookmark.then(onCreated);
} else {
let createBookmark = browser.bookmarks.create({
url: browser.runtime.getURL("home.html"),
title: "I2P Extension Home Page",
parentId: bookmarkToolbar[0].id,
});
createBookmark.then(onCreated);
}
console.log("(bookmarks) adding home page bookmark");
}
console.log('(bookmarks) adding home page bookmark');
console.log(
"(bookmarks) checking if we're running in an I2P Browser"
);
let gettingProxyInfo = browser.proxy.settings.get({});
gettingProxyInfo.then(gotProxyInfo);
}
console.log(
"(bookmarks) checking if we're running in an I2P Browser"
);
let gettingProxyInfo = browser.proxy.settings.get({});
gettingProxyInfo.then(gotProxyInfo);
}
}
function bookTorrent(bookmarkItems) {
if (!bookmarkItems.length) {
function gotProxyInfo(info) {
let port = info.value.http.split(':')[1];
if (port == '7644') {
let createBookmark = browser.bookmarks.create({
url: 'http://localhost:7657/i2psnark',
title: 'Bittorrent',
parentId: bookmarkToolbar[0].id
});
createBookmark.then(onCreated);
} else {
let createRhizomeBookmark = browser.bookmarks.create({
url:
'http://' + control_host + ':' + control_port + '/i2psnark',
title: 'Bittorrent',
parentId: bookmarkToolbar[0].id
});
createRhizomeBookmark.then(onCreated);
function bookTorrent(bookmarkItems) {
if (!bookmarkItems.length) {
function gotProxyInfo(info) {
let port = info.value.http.split(":")[1];
if (port == "7644") {
let createBookmark = browser.bookmarks.create({
url: "http://localhost:7657/i2psnark",
title: "Bittorrent",
parentId: bookmarkToolbar[0].id,
});
createBookmark.then(onCreated);
} else {
let createRhizomeBookmark = browser.bookmarks.create({
url:
"http://" + control_host + ":" + control_port + "/i2psnark",
title: "Bittorrent",
parentId: bookmarkToolbar[0].id,
});
createRhizomeBookmark.then(onCreated);
}
}
console.log(
"(bookmarks) checking if we're running in an I2P Browser"
);
let gettingProxyInfo = browser.proxy.settings.get({});
gettingProxyInfo.then(gotProxyInfo);
}
console.log(
"(bookmarks) checking if we're running in an I2P Browser"
);
let gettingProxyInfo = browser.proxy.settings.get({});
gettingProxyInfo.then(gotProxyInfo);
}
}
function bookConsole(bookmarkItems) {
if (!bookmarkItems.length) {
function gotProxyInfo(info) {
let port = info.value.http.split(':')[1];
if (port == '7644') {
let createBookmark = browser.bookmarks.create({
url: 'http://localhost:7657/home',
title: 'I2P Console',
parentId: bookmarkToolbar[0].id
});
createBookmark.then(onCreated);
} else {
let createRhizomeBookmark = browser.bookmarks.create({
url: 'http://' + control_host + ':' + control_port + '/home',
title: 'I2P Console',
parentId: bookmarkToolbar[0].id
});
createRhizomeBookmark.then(onCreated);
function bookConsole(bookmarkItems) {
if (!bookmarkItems.length) {
function gotProxyInfo(info) {
let port = info.value.http.split(":")[1];
if (port == "7644") {
let createBookmark = browser.bookmarks.create({
url: "http://localhost:7657/home",
title: "I2P Console",
parentId: bookmarkToolbar[0].id,
});
createBookmark.then(onCreated);
} else {
let createRhizomeBookmark = browser.bookmarks.create({
url: "http://" + control_host + ":" + control_port + "/home",
title: "I2P Console",
parentId: bookmarkToolbar[0].id,
});
createRhizomeBookmark.then(onCreated);
}
}
console.log(
"(bookmarks) checking if we're running in an I2P Browser"
);
let gettingProxyInfo = browser.proxy.settings.get({});
gettingProxyInfo.then(gotProxyInfo);
}
console.log(
"(bookmarks) checking if we're running in an I2P Browser"
);
let gettingProxyInfo = browser.proxy.settings.get({});
gettingProxyInfo.then(gotProxyInfo);
}
}
function bookMail(bookmarkItems) {
if (!bookmarkItems.length) {
function gotProxyInfo(info) {
let port = info.value.http.split(':')[1];
if (port == '7644') {
let createBookmark = browser.bookmarks.create({
url: 'http://localhost:7657/webmail',
title: 'Web Mail',
parentId: bookmarkToolbar[0].id
});
createBookmark.then(onCreated);
} else {
let createRhizomeBookmark = browser.bookmarks.create({
url: 'http://' + control_host + ':' + control_port + '/webmail',
title: 'Web Mail',
parentId: bookmarkToolbar[0].id
});
createRhizomeBookmark.then(onCreated);
function bookMail(bookmarkItems) {
if (!bookmarkItems.length) {
function gotProxyInfo(info) {
let port = info.value.http.split(":")[1];
if (port == "7644") {
let createBookmark = browser.bookmarks.create({
url: "http://localhost:7657/webmail",
title: "Web Mail",
parentId: bookmarkToolbar[0].id,
});
createBookmark.then(onCreated);
} else {
let createRhizomeBookmark = browser.bookmarks.create({
url:
"http://" + control_host + ":" + control_port + "/webmail",
title: "Web Mail",
parentId: bookmarkToolbar[0].id,
});
createRhizomeBookmark.then(onCreated);
}
console.log("(bookmarks) adding webmail bookmark");
}
console.log('(bookmarks) adding webmail bookmark');
console.log(
"(bookmarks) checking if we're running in an I2P Browser"
);
let gettingProxyInfo = browser.proxy.settings.get({});
gettingProxyInfo.then(gotProxyInfo);
}
console.log(
"(bookmarks) checking if we're running in an I2P Browser"
);
let gettingProxyInfo = browser.proxy.settings.get({});
gettingProxyInfo.then(gotProxyInfo);
}
}
function bookI2PTunnel(bookmarkItems) {
if (!bookmarkItems.length) {
function gotProxyInfo(info) {
let port = info.value.http.split(':')[1];
if (port == '7644') {
var createBookmark = browser.bookmarks.create({
url: 'http://localhost:7657/i2ptunnel',
title: 'Hidden Services Manager',
parentId: bookmarkToolbar[0].id
});
createBookmark.then(onCreated);
} else {
var createRhizomeBookmark = browser.bookmarks.create({
url:
'http://' + control_host + ':' + control_port + '/i2ptunnel',
title: 'Hidden Services Manager',
parentId: bookmarkToolbar[0].id
});
createRhizomeBookmark.then(onCreated);
function bookI2PTunnel(bookmarkItems) {
if (!bookmarkItems.length) {
function gotProxyInfo(info) {
let port = info.value.http.split(":")[1];
if (port == "7644") {
var createBookmark = browser.bookmarks.create({
url: "http://localhost:7657/i2ptunnel",
title: "Hidden Services Manager",
parentId: bookmarkToolbar[0].id,
});
createBookmark.then(onCreated);
} else {
var createRhizomeBookmark = browser.bookmarks.create({
url:
"http://" +
control_host +
":" +
control_port +
"/i2ptunnel",
title: "Hidden Services Manager",
parentId: bookmarkToolbar[0].id,
});
createRhizomeBookmark.then(onCreated);
}
console.log("(bookmarks) adding i2ptunnel bookmark");
}
console.log('(bookmarks) adding i2ptunnel bookmark');
console.log(
"(bookmarks) checking if we're running in an I2P Browser"
);
var gettingProxyInfo = browser.proxy.settings.get({});
gettingProxyInfo.then(gotProxyInfo);
}
console.log(
"(bookmarks) checking if we're running in an I2P Browser"
);
var gettingProxyInfo = browser.proxy.settings.get({});
gettingProxyInfo.then(gotProxyInfo);
}
function onRejected(error) {
console.log(`An error : ${error}`);
}
function onCreated(node) {
console.log("Bookmarked", node);
}
var b0 = browser.bookmarks.search({
title: "I2P Extension Home Page",
});
b0.then(bookHome, onRejected);
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);
var b4 = browser.bookmarks.search({
title: "I2P Console",
});
b4.then(bookConsole, onRejected);
defaultSettings["bookmarks_state"] = true;
}
var bt = browser.bookmarks.search({
query: "Toolbar",
});
function toolDir(bookmarkToolbar) {
let defaultSettings = {};
chrome.storage.local.set(defaultSettings);
console.log("(bookmarks) created");
var ibbt = browser.bookmarks.search("I2P Toolbar");
function setupDir(ibbt) {
function onToolbarCreated(node) {
var ibt = browser.bookmarks.search("I2P Toolbar");
ibt.then(bookmarks);
}
if (ibbt[0] == null) {
let createBookmark = browser.bookmarks.create({
title: "I2P Toolbar",
parentId: bookmarkToolbar[0].id,
});
createBookmark.then(onToolbarCreated);
}
}
ibbt.then(setupDir);
}
bt.then(toolDir);
function handleCreated(id, bookmarkInfo) {
//var propValue;
for (var propName in bookmarkInfo) {
let propValue = bookmarkInfo[propName];
console.log(propName, propValue);
}
}
function onRejected(error) {
console.log(`An error : ${error}`);
}
function onCreated(node) {
console.log('Bookmarked', node);
}
var b0 = browser.bookmarks.search({
title: 'I2P Extension Home Page'
});
b0.then(bookHome, onRejected);
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);
var b4 = browser.bookmarks.search({
title: 'I2P Console'
});
b4.then(bookConsole, onRejected);
browser.bookmarks.onCreated.addListener(handleCreated);
}
});
}
var bt = browser.bookmarks.search({
query: 'Toolbar'
});
function toolDir(bookmarkToolbar) {
var ibbt = browser.bookmarks.search('I2P Toolbar');
function setupDir(ibbt) {
function onToolbarCreated(node) {
var ibt = browser.bookmarks.search('I2P Toolbar');
ibt.then(bookmarks);
}
if (ibbt[0] == null) {
let createBookmark = browser.bookmarks.create({
title: 'I2P Toolbar',
parentId: bookmarkToolbar[0].id
});
createBookmark.then(onToolbarCreated);
}
}
ibbt.then(setupDir);
}
bt.then(toolDir);
function handleCreated(id, bookmarkInfo) {
//var propValue;
for (var propName in bookmarkInfo) {
let propValue = bookmarkInfo[propName];
console.log(propName, propValue);
}
}
browser.bookmarks.onCreated.addListener(handleCreated);
function conditionalBookmarksSetup(obj) {
console.log("(bookmarks) state", obj.bookmarks_state);
if (obj.bookmarks_state == false) {
bookmarksSetup();
}
});
if (obj.bookmarks_state == undefined) {
bookmarksSetup();
}
}
if (browser != null) {
let gettingStorage = browser.storage.local.get("bookmarks_state");
gettingStorage.then(conditionalBookmarksSetup, bookmarksSetup);
}
const bookmarksButton = document.getElementById("bookmarksButton");
if (bookmarksButton != null) {
bookmarksButton.addEventListener("click", bookmarksSetup);
}

30
cert.js
View File

@@ -1,42 +1,42 @@
function blankContent(id) {
let infoTitle = document.getElementById(id);
if (infoTitle === null) {
console.log('content error', id);
console.log("content error", id);
return;
}
infoTitle.textContent = '';
infoTitle.textContent = "";
}
function contentUpdateById(id, message) {
let infoTitle = document.getElementById(id);
let messageContent = chrome.i18n.getMessage(message);
if (infoTitle === null) {
console.log('content error', id, messageContent);
console.log("content error", id, messageContent);
return;
}
infoTitle.textContent = messageContent;
}
contentUpdateById('TypeLabel', 'siteLabel');
contentUpdateById("TypeLabel", "siteLabel");
contentUpdateById('CertLabel', 'certLabel');
contentUpdateById("CertLabel", "certLabel");
function tabCheck(tabInfo) {
// Information Section
console.log('(cert) checking tab');
var host = tabInfo[0].url.split('.i2p')[0] + '.i2p';
console.log("(cert) checking tab");
var host = tabInfo[0].url.split(".i2p")[0] + ".i2p";
if (host.length < 51) {
contentUpdateById('AddressInfo', 'isHostName');
contentUpdateById("AddressInfo", "isHostName");
} else {
if (host.endsWith('b32.i2p')) {
contentUpdateById('AddressInfo', 'isBase32');
if (host.endsWith("b32.i2p")) {
contentUpdateById("AddressInfo", "isBase32");
}
}
if (host.startsWith('https')) {
contentUpdateById('AddressCertInfo', 'certPresent');
console.log('(cert) initiating request to check server cert');
fetch(host).then(response => {
console.log('Updating cert information', response);
if (host.startsWith("https")) {
contentUpdateById("AddressCertInfo", "certPresent");
console.log("(cert) initiating request to check server cert");
fetch(host).then((response) => {
console.log("Updating cert information", response);
});
} else {
contentUpdateById("AddressCertInfo", "certAbsent");

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 215 KiB

View File

@@ -1,18 +1,18 @@
var proxy_scheme = 'HTTP';
var proxy_host = '127.0.0.1';
var proxy_port = '4444';
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 = '7657';
var control_host = "127.0.0.1";
var control_port = "7657";
var rpc_host = '127.0.0.1';
var rpc_port = '7657';
var rpc_path = 'jsonrpc';
var rpc_pass = 'itoopie';
var rpc_host = "127.0.0.1";
var rpc_port = "7657";
var rpc_path = "jsonrpc";
var rpc_pass = "itoopie";
var bt_rpc_host = '127.0.0.1';
var bt_rpc_port = '7657';
var bt_rpc_path = 'transmission/rpc';
var bt_rpc_pass = 'transmission';
var bt_rpc_host = "127.0.0.1";
var bt_rpc_port = "7657";
var bt_rpc_path = "transmission/rpc";
var bt_rpc_pass = "transmission";
var disable_history = false;

View File

@@ -2,53 +2,91 @@ function contentUpdateById(id, message) {
let infoTitle = document.getElementById(id);
let messageContent = chrome.i18n.getMessage(message);
if (infoTitle === null) {
console.log('content error', id, messageContent);
console.log("content error", id, messageContent);
return;
}
infoTitle.textContent = messageContent;
}
// Information Section
contentUpdateById('text-section-header', 'extensionName');
contentUpdateById('description', 'extensionDescription');
contentUpdateById('i2pbrowser-version', 'extensionVersion');
contentUpdateById('proxy-check', 'proxyFailedStatus');
contentUpdateById("text-section-header", "extensionName");
contentUpdateById("description", "extensionDescription");
contentUpdateById("i2pbrowser-version", "extensionVersion");
contentUpdateById("proxy-check", "proxyFailedStatus");
// 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('histDesc', 'histDesc');
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("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', 'windowVisitHomepage');
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');
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", "windowVisitHomepage");
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');
contentUpdateById("window-visit-webpage", "windowVisitWebPage");
contentUpdateById("webpage", "help");
contentUpdateById("window-visit-sources", "windowVisitSources");
contentUpdateById("sources", "sources");
contentUpdateById("window-visit-releases", "windowVisitReleases");
contentUpdateById("releases", "releases");
fetch('http://proxy.i2p').then(myJson => {
console.log('FETCH RESULT', myJson);
contentUpdateById('proxy-check', 'proxySuccessStatus');
fetch("http://proxy.i2p").then((myJson) => {
contentUpdateById("proxy-check", "proxySuccessStatus");
let readyness = document.querySelectorAll(".readyness");
if (readyness != null) {
hide(readyness);
}
});
function hide(elements) {
elements = elements.length ? elements : [elements];
for (var index = 0; index < elements.length; index++) {
elements[index].style.display = "none";
}
}
function unhide(elements) {
elements = elements.length ? elements : [elements];
for (var index = 0; index < elements.length; index++) {
elements[index].style.display = "inline-block";
}
}
//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);
});
fetch("http://127.0.0.1:7657/jsonrpc/")
.then((myJson) => {
var toopieLinks = document.querySelectorAll(".window-visit-toopie");
unhide(toopieLinks);
})
.catch((error) => {
var toopieLinks = document.querySelectorAll(".window-visit-toopie");
hide(toopieLinks);
});

View File

@@ -1,5 +1,5 @@
//var windowIds = []
var titlepref = chrome.i18n.getMessage('titlePreface');
var titlepref = chrome.i18n.getMessage("titlePreface");
function onError(error) {
console.log(`Error : ${error}`);
@@ -10,23 +10,23 @@ function eventHandler(event) {
console.log(`Created window : ${windowInfo.id}`);
browser.tabs.create({
windowId: windowInfo.id,
url: 'about:blank',
cookieStoreId: event.target.dataset.identity
url: "about:blank",
cookieStoreId: event.target.dataset.identity,
});
}
if (event.target.dataset.action == 'create') {
if (event.target.dataset.action == "create") {
var creating = browser.tabs.create({
cookieStoreId: event.target.dataset.identity
cookieStoreId: event.target.dataset.identity,
});
creating.then(onCreated, onError);
}
if (event.target.dataset.action == 'close-all') {
if (event.target.dataset.action == "close-all") {
browser.tabs
.query({
cookieStoreId: event.target.dataset.identity
cookieStoreId: event.target.dataset.identity,
})
.then(tabs => {
browser.tabs.remove(tabs.map(rem => rem.id));
.then((tabs) => {
browser.tabs.remove(tabs.map((rem) => rem.id));
});
}
event.preventDefault();
@@ -52,9 +52,9 @@ if (browser.contextualIdentities === undefined) {
} else {
browser.contextualIdentities
.query({
name: titlepref
name: titlepref,
})
.then(identities => {
.then((identities) => {
if (!identities.length) {
div.innerText = "No identities returned from the API.";
return;

88
debian/changelog vendored
View File

@@ -1,3 +1,91 @@
i2psetproxy.js (0.107-1) UNRELEASED; urgency=low
* Small code fixes
* Fix for interference with non-I2P containers
-- idk <hankhill19580@gmail.com> Wed, 26 May 2021 12:56:56 -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

View File

@@ -1,61 +1,73 @@
function routerHost(url) {
let hostname = '';
let path = '';
// console.log("(urlcheck) HANDLER URL CHECK");
let hostname = "";
let path = "";
function pathcheck(str) {
// console.log("(urlcheck) HANDLER PATH CHECK", str);
if (str != undefined) {
let final = str.split('/')[0];
if (final === 'i2ptunnelmgr' || final === 'i2ptunnel') {
console.log('(urlcheck) Tunnel application path', final);
return 'i2ptunnelmgr';
let final = str.split("/")[0];
if (final === "i2ptunnelmgr" || final === "i2ptunnel") {
console.log("(urlcheck) Tunnel application path", final);
return "i2ptunnelmgr";
} else if (
final === 'i2psnark' ||
final === 'torrents' ||
final.startsWith('transmission') ||
final.startsWith('tracker')
final === "i2psnark" ||
final === "torrents" ||
final.startsWith("transmission") ||
final.startsWith("tracker") ||
url.includes(":7662")
) {
console.log('(urlcheck) Torrent application path', final);
return 'i2psnark';
} else if (final === 'webmail' || final === 'susimail') {
console.log('(urlcheck) Mail application path', final);
return 'webmail';
} else if (final.startsWith('MuWire')) {
if (!url.includes('.png')) {
console.log('(urlcheck) MuWire application path', final);
return 'muwire';
console.log("(urlcheck) Torrent application path", final);
return "i2psnark";
} else if (final === "webmail" || final === "susimail") {
if (!url.includes(".css")) {
console.log("(urlcheck) Mail application path", final);
return "webmail";
}
} else if (final.startsWith("MuWire")) {
if (!url.includes(".png")) {
console.log("(urlcheck) MuWire application path", final);
return "muwire";
}
} else if (final.startsWith("i2pbote")) {
if (!url.includes(".png")) {
console.log("(urlcheck) I2PBote application path", final);
return "i2pbote";
}
} else if (
final === 'home' ||
final === 'console' ||
final === 'dns' ||
final === 'sitemap' ||
final.startsWith('config')
final === "home" ||
final === "console" ||
final === "dns" ||
final === "susidns" ||
final.startsWith("susidns") ||
final === "sitemap" ||
final.startsWith("config")
) {
console.log('(urlcheck) Console application path', final);
return 'routerconsole';
console.log("(urlcheck) Console application path", final);
return "routerconsole";
}
}
return true;
}
if (url.indexOf('://') > -1) {
hostname = url.split('/')[2];
let prefix = url.substr(0, url.indexOf('://') + 3);
path = url.replace(prefix + hostname + '/', '');
if (url.indexOf("://") > -1) {
hostname = url.split("/")[2];
let prefix = url.substr(0, url.indexOf("://") + 3);
path = url.replace(prefix + hostname + "/", "");
} else if (identifyProtocolHandler(url)) {
let newurl = identifyProtocolHandler(url);
return routerHost(newurl);
} else {
hostname = url.split('/')[0];
path = url.replace(hostname + '/', '');
hostname = url.split("/")[0];
path = url.replace(hostname + "/", "");
}
if (hostname === control_host + ':' + control_port) {
if (hostname === control_host + ":" + control_port) {
//console.log("(hostcheck) router console found on configured ports");
return pathcheck(path);
}
if (hostname === 'localhost' + ':' + control_port) {
if (hostname === "localhost" + ":" + control_port) {
//console.log("(hostcheck) router console found on configured ports");
return pathcheck(path);
}
if (hostname === '127.0.0.1' + ':' + control_port) {
if (hostname === "127.0.0.1" + ":" + control_port) {
return pathcheck(path);
}
@@ -65,45 +77,44 @@ function routerHost(url) {
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:', '');
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:')) {
} else if (url.includes("ext+rc:")) {
return url;
}
return false;
}
function trimHost(url) {
let hostname = '';
let prefix = '';
if (url.indexOf('://') > -1) {
prefix = url.substr(0, url.indexOf('://') + 3);
hostname = url.split('/')[2];
let hostname = "";
let prefix = "";
if (url.indexOf("://") > -1) {
prefix = url.substr(0, url.indexOf("://") + 3);
hostname = url.split("/")[2];
} else {
hostname = url.split('/')[0];
hostname = url.split("/")[0];
}
let path = url.replace(prefix + hostname, '');
console.log('(handler) path', prefix + hostname, path);
let path = url.replace(prefix + hostname, "");
console.log("(handler) path", prefix + hostname, path);
return path;
}
var handlerSetup = function(requestDetails) {
var handlerSetup = function (requestDetails) {
//console.log("checking protocol handler listener")
let rwurl = identifyProtocolHandler(requestDetails.url);
if (rwurl != false) {
console.log('(handler) rewrite URL requested', rwurl);
console.log("(handler) rewrite URL requested", rwurl);
requestDetails.redirectUrl = rwurl;
requestDetails.url = trimHost(rwurl);
requestDetails.originUrl = trimHost(rwurl);
}
return requestDetails;
};
browser.webRequest.onBeforeRequest.addListener(
handlerSetup,
{ urls: ['<all_urls>'] },
['blocking']
);
/*
browser.webRequest.onBeforeRequest.addListener(handlerSetup, {
urls: ['<all_urls>'],
});
*/

385
home.css
View File

@@ -1,34 +1,140 @@
* {
padding: 0;
color: #1f1a24;
margin: 0
margin: 0;
}
a,
button {
color: #1f1a24;
html {
margin: 0 4%;
padding: 0 20px;
min-height: 100%;
background: #9ab;
background: repeating-linear-gradient(to bottom, #9ab, #89a 2px);
scrollbar-color: #bcd #789;
}
body {
margin: 0;
padding: 20px 40px;
font-family: Open Sans, Noto Sans, Segoe UI, sans-serif;
font-size: 12pt;
color: #495057;
text-decoration: none;
word-wrap: break-word;
border-left: 1px solid #495057;
border-right: 1px solid #495057;
box-shadow: 0 0 2px 2px rgba(0, 0, 0, .1);
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 15px 20px;
width: calc(100% - 40px);
text-align: justify;
border: 1px solid #9ab;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #fff;
background: #dee2e6;
}
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+h3, ul+h2 {
margin-top: 20px;
}
a, button {
color: #3b6bbf;
text-decoration: none;
background: none;
font-weight: 700;
word-wrap: break-word;
outline: 0;
padding: 3px;
margin: auto
}
.applicationDesc {
color: #81888f;
text-decoration: none;
font-weight: 700;
word-wrap: break-word;
outline: 0
outline: 0;
}
.applicationDesc:hover,
a:hover,
button:hover {
color: #495057;
.applicationDesc:hover, a:hover, button:hover {
text-decoration: none;
font-weight: 700;
word-wrap: break-word;
outline: 0
outline: 0;
}
button {
border: none;
cursor: pointer;
@@ -36,137 +142,77 @@ button {
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;
margin: 0 auto;
padding: 0;
text-decoration: none;
font-weight: 700;
word-wrap: break-word;
outline: 0
}
.button-list {
min-height: 230px;
min-width: 230px
outline: 0;
}
.background {
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;
font-weight: 700;
word-wrap: break-word;
outline: 0
background-color: #f8f8ff;
height: 100%;
}
.content {
min-height: 3rem;
padding: 1rem;
margin: 1.5rem;
display: block;
border-radius: 2px;
min-width: 100%
}
#header,
.application-info,
.browser-info,
.extended-info,
.search-info {
min-height: 3rem;
padding: 1rem;
margin-top: 1.5rem;
display: block;
min-height: 3rem;
min-width: 95%;
display: inline-block;
border: 1px solid #d9d9d6;
border-radius: 2px;
min-width: 100%
box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccc;
background: #f8f8ff;
}
h1 {
margin: auto;
font-family: "Droid Sans","Noto Sans",Ubuntu,"Segoe UI","Lucida Grande",Verdana,Helvetica,sans-serif;
font-weight: 600;
font-size: 32px;
color: #e6e6e7;
background: #1f1a24;
width: 100%;
border-radius: 2px 2px 0 0
}
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;
color: #e6e6e7;
border-radius: 2px 2px 0 0;
background: #1f1a24;
width: 100%;
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;
color: #41465f;
border-radius: 2px 2px 0 0;
background: #1f1a24;
width: 100%;
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 #d9d9d6;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccc;
background: #f8f8ff;
}
.showhider {
margin-right: auto;
font-family: "Droid Sans","Noto Sans",Ubuntu,"Segoe UI","Lucida Grande",Verdana,Helvetica,sans-serif;
border: none;
padding: 0!important;
text-transform: uppercase;
background: none !important;
border: none;
width: 90%;
color: #3b6bbf;
text-decoration: none;
font-weight: 700;
word-wrap: break-word;
outline: 0;
text-align: left
text-align: left;
}
#links .showhider {
font-size: 25px
font-size: 25px;
}
.section-header {
display: flex;
flex-direction: row;
margin-bottom: 80px
}
ul {
margin: auto;
border-radius: 2px;
width: 100%;
margin: 0;
padding: 0
}
li {
display: block;
text-align: center;
margin: 0;
padding: 0
}
.center {
display: block;
margin-left: auto;
margin-right: auto;
width: 50%
margin-bottom: 80px;
}
#readyness {
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;
display: block
box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccc;
display: inline-block;
}
#onboarding {
min-height: 5rem;
padding: .5rem;
@@ -175,101 +221,138 @@ li {
width: 42%;
min-width: 42%;
font-size: 2rem;
background: #a48fe1;
text-align: center!important;
border-radius: 2px
border: 1px solid #a48fe1;
border-radius: 2px;
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%;
display: block
}
html body ul.label-list li {
list-style: none;
float: left
}
html body ul.label-list li:nth-child(odd) {
clear: left
display: inline-block;
background: #dee2e6;
border: 1px solid #dee2e6;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccc;
}
#linksExplain {
min-height: 5rem;
padding: .5rem;
margin: .5rem;
width: 30%;
min-width: 30%;
background: #dee2e6;
text-align: center!important;
border-radius: 2px
border: 1px solid #dee2e6;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccc;
}
#applicationExplain,
#controlExplain {
#applicationExplain, #controlExplain {
min-height: 5rem;
padding: .5rem;
margin: .5rem;
text-align: left!important;
float: left
width: 30%;
min-width: 30%;
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;
float: left;
}
#proxyReady {
min-height: 3rem;
padding: .5rem;
margin: .2rem;
width: 38%;
min-width: 38%;
display: block;
display: inline-block;
background: #d9d9d6;
float: right;
text-align: center!important
text-align: center!important;
border: 1px solid #d9d9d6;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccc;
}
#proxyUnready {
min-height: 3rem;
padding: .5rem;
margin: .2rem;
width: 38%;
min-width: 38%;
display: block;
display: inline-block;
float: right;
text-align: center!important
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;
}
#consoleOn {
min-height: 3rem;
padding: .5rem;
margin: .2rem;
width: 38%;
min-width: 38%;
display: block;
display: inline-block;
float: left;
text-align: center!important
}
.tabicon {
min-width: 64px;
min-height: 64px
}
li.application {
text-align: left
}
button.applicationName {
width: auto
text-align: center!important;
border: 1px solid #f7e59a;
border-radius: 2px;
background: #f7e59a;
box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccc;
}
.onboardingContent {
font-size: .8rem!important;
text-align: left;
display: none
display: none;
}
#info-content {
display: none
display: none;
}
.consoleOn:hover #proxy-check,
.proxyReady:hover #proxy-check {
.consoleOn:hover #proxy-check, .proxyReady:hover #proxy-check {
visibility: visible;
opacity: 1
opacity: 1;
}
img {
max-width: 100%;
margin: 3%
}
img.readyness {
height: 100%;
width: auto
width: auto;
}
input {
color: #1f1a24
@media only screen and (max-width: 399px) {
.application-info {
display: none;
}
}
@media screen and (max-width: 1200px) {
body {
font-size: 10.5pt;
}
}
video {
width: 100%
}
.hidden {
visibility: none;
display: none
}

View File

@@ -86,8 +86,8 @@
</div>
</li>-->
<li class="application">
<a class="applicationName" href="toopie.html" id="window-visit-toopie">Toopie</a> <span class="applicationDesc" id="toopie">For information about your I2P router status, go here:</span>
<li class="application window-visit-toopie">
<a class="applicationName window-visit-toopie" href="toopie.html" id="window-visit-toopie">Toopie</a> <span class="applicationDesc window-visit-toopie" id="toopie">For information about your I2P router status, go here:</span>
</li>
<li class="application">
@@ -147,5 +147,6 @@
</div>
<script src="home.js" type="text/javascript"></script>
<script src="content.js" type="text/javascript"></script> <!--</div>-->
<script src="i2pcontrol/i2pcontrol.js" type="text/javascript"></script> <!--</div>-->
</body>
</html>

34
home.js
View File

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

177
host.js
View File

@@ -1,15 +1,15 @@
function proxyHost(url) {
let hostname = '';
if (url.indexOf('://') > -1) {
hostname = url.split('/')[2];
let hostname = "";
if (url.indexOf("://") > -1) {
hostname = url.split("/")[2];
} else {
hostname = url.split('/')[0];
hostname = url.split("/")[0];
}
if (hostname == 'proxy.i2p') {
if (hostname == "proxy.i2p") {
return true;
}
if (
hostname == 'c6lilt4cr5x7jifxridpkesf2zgfwqfchtp6laihr4pdqomq25iq.b32.i2p'
hostname == "c6lilt4cr5x7jifxridpkesf2zgfwqfchtp6laihr4pdqomq25iq.b32.i2p"
) {
return true;
}
@@ -17,119 +17,158 @@ function proxyHost(url) {
}
function localHost(url) {
let hostname = '';
if (url.indexOf('://') > -1) {
hostname = url.split('/')[2];
let hostname = "";
if (url.indexOf("://") > -1) {
hostname = url.split("/")[2];
} else {
hostname = url.split('/')[0];
hostname = url.split("/")[0];
}
hostname = hostname.split(':')[0];
if (hostname === '127.0.0.1') {
return true;
} else if (hostname === 'localhost') {
return true;
hostname = hostname.split(":")[0];
console.log("(isolate) hostname localhost", hostname);
console.log("(isolate) url localhost", url);
if (hostname === "127.0.0.1") {
if (url.indexOf("7669") != -1) return "irc";
} else if (hostname === "localhost") {
if (url.indexOf("8084") != -1) return "blog";
}
return false;
}
function extensionHost(url) {
var prefix = browser.runtime
.getURL("")
.replace("moz-extension://", "")
.replace("/", "");
if (url.originUrl !== undefined) {
var res = url.originUrl.startsWith(browser.runtime.getURL(''));
var originUrl = url.originUrl
.replace("moz-extension://", "")
.replace("/", "");
// console.log("(urlcheck) Extension application path", originUrl);
// console.log("(urlcheck) Extension application path", prefix);
var res = originUrl.startsWith(prefix);
// console.log("(urlcheck) Extension application path", res);
if (res) return res;
}
if (url.url !== undefined) {
var res = url.url.startsWith(browser.runtime.getURL(''));
if (url.documentUrl !== undefined) {
// console.log("(urlcheck) Extension application path", originUrl);
// console.log("(urlcheck) Extension application path", prefix);
var res = originUrl.startsWith(prefix);
// console.log("(urlcheck) Extension application path", res);
if (res) return res;
}
console.log("(urlcheck) Extension application path", url);
}
function i2pHostName(url) {
let hostname = '';
if (url.indexOf('://') > -1) {
hostname = url.split('/')[2];
let hostname = "";
console.log("(hosts)", url);
let u = new URL(url);
if (u.host.endsWith(".i2p")) {
hostname = u.host;
} else if (url.includes("=")) {
if (url.includes(".i2p")) {
lsit = url.split("=");
for (let item in lsit) {
var items = lsit[item].split(`\ % `); //"\%")
for (let p in items) {
if (items[p].includes(".i2p")) {
hostname = items[p].replace("3D", 1);
}
break;
}
if (hostname != "") {
break;
}
}
}
} else if (url.indexOf("://") > -1) {
hostname = url.split("/")[2];
} else {
hostname = url.split('/')[0];
hostname = url.split("/")[0];
}
console.log("(hosts) scrub", hostname);
return hostname;
}
function i2pHost(url) {
let hostname = i2pHostName(url);
return hostname.endsWith('.i2p');
return hostname.endsWith(".i2p");
}
function routerHost(url) {
let hostname = '';
let path = '';
// console.log("(urlcheck) HOST URL CHECK");
let hostname = "";
let path = "";
function pathcheck(str) {
if (str != undefined) {
let final = str.split('/')[0];
if (final === 'i2ptunnelmgr' || final === 'i2ptunnel') {
console.log('(urlcheck) Tunnel application path', final);
return 'i2ptunnelmgr';
let final = str.split("/")[0];
if (final === "i2ptunnelmgr" || final === "i2ptunnel") {
console.log("(urlcheck) Tunnel application path", final);
return "i2ptunnelmgr";
} else if (
final === 'i2psnark' ||
final === 'torrents' ||
final.startsWith('transmission') ||
final.startsWith('tracker')
final === "i2psnark" ||
final === "torrents" ||
final.startsWith("transmission") ||
final.startsWith("tracker") ||
url.includes(":7662")
) {
console.log('(urlcheck) Torrent application path', final);
return 'i2psnark';
} else if (final === 'webmail' || final === 'susimail') {
console.log('(urlcheck) Mail application path', final);
return 'webmail';
} else if (final.startsWith('MuWire')) {
if (!url.includes('.png')) {
console.log('(urlcheck) MuWire application path', final);
return 'muwire';
console.log("(urlcheck) Torrent application path", final);
return "i2psnark";
} else if (final === "webmail" || final === "susimail") {
if (!url.includes(".css")) {
console.log("(urlcheck) Mail application path", final);
return "webmail";
}
} else if (final.startsWith("MuWire")) {
if (!url.includes(".png")) {
console.log("(urlcheck) MuWire application path", final);
return "muwire";
}
} else if (final.startsWith("i2pbote")) {
if (!url.includes(".png")) {
console.log("(urlcheck) I2PBote application path", final);
return "i2pbote";
}
} else if (
final === 'home' ||
final === 'console' ||
final === 'dns' ||
final === 'sitemap' ||
final.startsWith('config')
final === "home" ||
final === "console" ||
final === "dns" ||
final === "susidns" ||
final.startsWith("susidns") ||
final === "sitemap" ||
final.startsWith("config")
) {
console.log('(urlcheck) Console application path', final);
return 'routerconsole';
console.log("(urlcheck) Console application path", final);
return "routerconsole";
}
}
return true;
}
if (url.indexOf('://') > -1) {
hostname = url.split('/')[2];
let prefix = url.substr(0, url.indexOf('://') + 3);
path = url.replace(prefix + hostname + '/', '');
if (url.indexOf("://") > -1) {
hostname = url.split("/")[2];
let prefix = url.substr(0, url.indexOf("://") + 3);
path = url.replace(prefix + hostname + "/", "");
} else if (identifyProtocolHandler(url)) {
let newurl = identifyProtocolHandler(url);
return routerHost(newurl);
} else {
hostname = url.split('/')[0];
path = url.replace(hostname + '/', '');
hostname = url.split("/")[0];
path = url.replace(hostname + "/", "");
}
if (hostname === control_host + ':' + control_port) {
if (hostname === control_host + ":" + control_port) {
return pathcheck(path);
}
if (hostname === control_host + ':' + '7662') {
if (hostname === "localhost" + ":" + control_port) {
return pathcheck(path);
}
if (hostname === 'localhost' + ':' + '7662') {
if (hostname === "127.0.0.1" + ":" + control_port) {
return pathcheck(path);
}
if (hostname === '127.0.0.1' + ':' + '7662') {
if (hostname === "localhost" + ":" + 7070) {
return pathcheck(path);
}
if (hostname === 'localhost' + ':' + control_port) {
return pathcheck(path);
}
if (hostname === '127.0.0.1' + ':' + control_port) {
return pathcheck(path);
}
if (hostname === 'localhost' + ':' + 7070) {
return pathcheck(path);
}
if (hostname === '127.0.0.1' + ':' + 7070) {
if (hostname === "127.0.0.1" + ":" + 7070) {
return pathcheck(path);
}
return false;

BIN
i2p-https.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

View File

@@ -1,5 +1,8 @@
i2pcontrol.js
=============
toopie.html/i2pcontrol.js
=========================
This is inside of the webextension for now, but it's actually a fully-fledged,
standalone library for talking to i2pcontrol.
To enable toopie.html, the built in I2P monitoring system in this webextension,
go to the [Web App Configuration page in the I2P Router and start I2PControl](http://127.0.0.1:7657/configwebapps).
Click the "Start" button next to the menu item that says `jsonrpc`.
- ![i2pcontrol.png](i2pcontrol.png)

View File

@@ -1,9 +1,9 @@
var hello = 'hello i2pcontrol';
var hello = "hello i2pcontrol";
function makeid(length) {
var result = '';
var result = "";
var characters =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var charactersLength = characters.length;
for (var i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
@@ -22,16 +22,16 @@ function send(
let requestBody = JSON.stringify(data);
//console.log("(i2pcontrol) sending request", requestBody);
let opts = {
method: 'POST', // *GET, POST, PUT, DELETE, etc.
mode: 'cors', // no-cors, *cors, same-origin
cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached
credentials: 'same-origin', // include, *same-origin, omit
method: "POST", // *GET, POST, PUT, DELETE, etc.
mode: "cors", // no-cors, *cors, same-origin
cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached
credentials: "same-origin", // include, *same-origin, omit
headers: {
'Content-Type': 'application/json'
"Content-Type": "application/json",
},
redirect: 'follow', // manual, *follow, error
referrerPolicy: 'no-referrer', // no-referrer, *client
body: requestBody // body data type must match "Content-Type" header
redirect: "follow", // manual, *follow, error
referrerPolicy: "no-referrer", // no-referrer, *client
body: requestBody, // body data type must match "Content-Type" header
};
const response = await fetch(url, opts);
return await response.json(); // parses JSON response into native JavaScript objects
@@ -39,7 +39,7 @@ function send(
//console.log("http://" + control_host + ":" + control_port + "/" + control_path)
return postData(
'http://' + control_host + ':' + control_port + '/' + control_path + '/',
"http://" + control_host + ":" + control_port + "/" + control_path + "/",
message
);
}
@@ -51,12 +51,12 @@ async function authenticate(
control_path = "jsonrpc"
) {
var json = new Object();
json['id'] = makeid(6);
json['jsonrpc'] = '2.0';
json['method'] = 'Authenticate';
json['params'] = new Object();
json['params']['API'] = 1;
json['params']['Password'] = password;
json["id"] = makeid(6);
json["jsonrpc"] = "2.0";
json["method"] = "Authenticate";
json["params"] = new Object();
json["params"]["API"] = 1;
json["params"]["Password"] = password;
return send(json, control_host, control_port, control_path);
}
@@ -81,14 +81,14 @@ async function Echo(
password = "itoopie"
) {
function echo(token) {
console.log('(i2pcontrol) testing I2PControl connection');
console.log("(i2pcontrol) testing I2PControl connection");
var json = new Object();
json['id'] = makeid(6);
json['jsonrpc'] = '2.0';
json['method'] = 'Echo';
json['params'] = new Object();
json['params']['Token'] = token;
json['params']['Echo'] = message;
json["id"] = makeid(6);
json["jsonrpc"] = "2.0";
json["method"] = "Echo";
json["params"] = new Object();
json["params"]["Token"] = token;
json["params"]["Echo"] = message;
return send(json, control_host, control_port, control_path);
}
let token = GetToken(password, control_host, control_port, control_path);
@@ -121,13 +121,13 @@ async function GetRate(
) {
function getrate(token) {
var json = new Object();
json['id'] = makeid(6);
json['jsonrpc'] = '2.0';
json['method'] = 'I2PControl';
json['params'] = new Object();
json['params']['Token'] = token;
json['params']['Stat'] = Query;
json['params']['Period'] = 2000;
json["id"] = makeid(6);
json["jsonrpc"] = "2.0";
json["method"] = "I2PControl";
json["params"] = new Object();
json["params"]["Token"] = token;
json["params"]["Stat"] = Query;
json["params"]["Period"] = 2000;
return send(json, control_host, control_port, control_path);
}
let token = GetToken(password, control_host, control_port, control_path);
@@ -160,12 +160,12 @@ async function I2PControl(
) {
function i2pcontrol(token) {
var json = new Object();
json['id'] = makeid(6);
json['jsonrpc'] = '2.0';
json['method'] = 'I2PControl';
json['params'] = new Object();
json['params']['Token'] = token;
json['params'][Query] = null;
json["id"] = makeid(6);
json["jsonrpc"] = "2.0";
json["method"] = "I2PControl";
json["params"] = new Object();
json["params"]["Token"] = token;
json["params"][Query] = null;
return send(json, control_host, control_port, control_path);
}
let token = GetToken(password, control_host, control_port, control_path);
@@ -204,12 +204,12 @@ async function RouterInfo(
) {
function routerinfo(token) {
var json = new Object();
json['id'] = makeid(6);
json['jsonrpc'] = '2.0';
json['method'] = 'RouterInfo';
json['params'] = new Object();
json['params']['Token'] = token;
json['params'][Query] = null;
json["id"] = makeid(6);
json["jsonrpc"] = "2.0";
json["method"] = "RouterInfo";
json["params"] = new Object();
json["params"]["Token"] = token;
json["params"][Query] = null;
return send(json, control_host, control_port, control_path);
}
let token = GetToken(password, control_host, control_port, control_path);
@@ -255,12 +255,12 @@ async function RouterManager(
) {
function routermanager(token) {
var json = new Object();
json['id'] = makeid(6);
json['jsonrpc'] = '2.0';
json['method'] = 'RouterManager';
json['params'] = new Object();
json['params']['Token'] = token;
json['params'][Query] = null;
json["id"] = makeid(6);
json["jsonrpc"] = "2.0";
json["method"] = "RouterManager";
json["params"] = new Object();
json["params"]["Token"] = token;
json["params"][Query] = null;
return send(json, control_host, control_port, control_path);
}
let token = GetToken(password, control_host, control_port, control_path);
@@ -300,12 +300,12 @@ async function NetworkSetting(
) {
function networksetting(token) {
var json = new Object();
json['id'] = makeid(6);
json['jsonrpc'] = '2.0';
json['method'] = 'NetworkSetting';
json['params'] = new Object();
json['params']['Token'] = token;
json['params'][Query] = null;
json["id"] = makeid(6);
json["jsonrpc"] = "2.0";
json["method"] = "NetworkSetting";
json["params"] = new Object();
json["params"]["Token"] = token;
json["params"][Query] = null;
return send(json, control_host, control_port, control_path);
}
let token = GetToken(password, control_host, control_port, control_path);
@@ -336,56 +336,77 @@ function UpdateNetworkSettingElementByID(
}
function UpdateContents() {
UpdateRouterInfoElementByID('i2p.router.status', 'router-status');
UpdateRouterInfoElementByID('i2p.router.uptime', 'router-uptime');
UpdateRouterInfoElementByID('i2p.router.version', 'router-version');
UpdateRouterInfoElementByID("i2p.router.status", "router-status");
UpdateRouterInfoElementByID("i2p.router.uptime", "router-uptime");
UpdateRouterInfoElementByID("i2p.router.version", "router-version");
UpdateRouterInfoElementByID(
'i2p.router.net.bw.inbound.1s',
'router-net-bw-inbound-1s'
"i2p.router.net.bw.inbound.1s",
"router-net-bw-inbound-1s"
);
UpdateRouterInfoElementByID(
'i2p.router.net.bw.inbound.15s',
'router-net-bw-inbound-15s'
"i2p.router.net.bw.inbound.15s",
"router-net-bw-inbound-15s"
);
UpdateRouterInfoElementByID(
'i2p.router.net.bw.outbound.1s',
'router-net-bw-outbound-1s'
"i2p.router.net.bw.outbound.1s",
"router-net-bw-outbound-1s"
);
UpdateRouterInfoElementByID(
'i2p.router.net.bw.outbound.15s',
'router-net-bw-outbound-15s'
"i2p.router.net.bw.outbound.15s",
"router-net-bw-outbound-15s"
);
UpdateRouterInfoElementByID('i2p.router.net.status', 'router-net-status');
UpdateRouterInfoElementByID("i2p.router.net.status", "router-net-status");
UpdateRouterInfoElementByID(
'i2p.router.net.tunnels.participating',
'router-net-tunnels-participating'
"i2p.router.net.tunnels.participating",
"router-net-tunnels-participating"
);
UpdateRouterInfoElementByID(
'i2p.router.netdb.activepeers',
'router-netdb-activepeers'
"i2p.router.netdb.activepeers",
"router-netdb-activepeers"
);
UpdateRouterInfoElementByID(
'i2p.router.netdb.fastpeers',
'router-netdb-fastpeers'
"i2p.router.netdb.fastpeers",
"router-netdb-fastpeers"
);
UpdateRouterInfoElementByID(
'i2p.router.netdb.highcapacitypeers',
'router-netdb-highcapacitypeers'
"i2p.router.netdb.highcapacitypeers",
"router-netdb-highcapacitypeers"
);
UpdateRouterInfoElementByID(
'i2p.router.netdb.isreseeding',
'router-netdb-isreseeding'
"i2p.router.netdb.isreseeding",
"router-netdb-isreseeding"
);
UpdateRouterInfoElementByID(
'i2p.router.netdb.knownpeers',
'router-netdb-knownpeers'
"i2p.router.netdb.knownpeers",
"router-netdb-knownpeers"
);
}
var done = Echo(hello);
done.then(Done);
done.then(Done).catch(Done);
function Done(output) {
console.log('(i2pcontrol) I2PControl connection tested,', output);
function hide(elements) {
elements = elements.length ? elements : [elements];
for (var index = 0; index < elements.length; index++) {
elements[index].style.display = "none";
}
}
function unhide(elements) {
elements = elements.length ? elements : [elements];
for (var index = 0; index < elements.length; index++) {
elements[index].style.display = "inline-block";
}
}
console.log("(i2pcontrol) I2PControl connection tested,", output);
if (output == hello) {
var toopieLinks = document.querySelectorAll(".window-visit-toopie");
unhide(toopieLinks);
} else {
var toopieLinks = document.querySelectorAll(".window-visit-toopie");
hide(toopieLinks);
}
return output;
}

BIN
i2pcontrol/i2pcontrol.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

17
i2pcontrol/index.html Normal file
View File

@@ -0,0 +1,17 @@
<!DOCTYPE html>
<html>
<head>
<title>I2P in Private Browsing Mode</title>
<link rel="stylesheet" type="text/css" href="../home.css" />
<link rel="stylesheet" type="text/css" href="../sidebar.css" />
</head>
<body>
<h1 id="toopie.htmli2pcontrol.js">toopie.html/i2pcontrol.js</h1>
<p>To enable toopie.html, the built in I2P monitoring system in this webextension, go to the <a href="http://127.0.0.1:7657/configwebapps">Web App Configuration page in the I2P Router and start I2PControl</a>. Click the &quot;Start&quot; button next to the menu item that says <code>jsonrpc</code>.</p>
<ul>
<li><img src="i2pcontrol.png" title="fig:" alt="i2pcontrol.png" /></li>
</ul>
</body>
</html>

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

0
icons/README.md Normal file
View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 34 KiB

BIN
icons/infotoopie.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

BIN
icons/infotoopiebt.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

BIN
icons/infotoopies.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

BIN
icons/infotoopiesbt.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -57,7 +57,7 @@ Clearnet Bittorrent network(With a web seed to support it in case one goes
dead).</p>
<ul>
<li><a href="magnet:?xt=urn:btih:5f45673bc107ec42a8b4d02aa4d5d7487949fc66">Magnet Link</a></li>
<li><a href="magnet:?xl=2485magnetsubdn=i2ppb%40eyedeekay.github.io.xpi.torrentmagnetsubxt=urn:tree:tiger:w6kewvpw25bnau2rwkczbnryrjdzn54ietse3zimagnetsubxt=urn:ed2k:1cd9743fb664404298b7f2ad7ee45db0magnetsubxt=urn:aich:4vhcsp6t3c2mkjzds2etixyinyj7xtkp">Magnet Link</a></li>
<li><a href="./i2ppb@eyedeekay.github.io.xpi.torrent">Get the .torrent file</a></li>
</ul>
@@ -124,15 +124,16 @@ 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 src="i2psnark.png" alt="Visiting i2psnark" title="" /></li>
<li><img src="transmissionrpc.png" alt="Monitoring torrents" title="" /></li>
<li><img src="x-i2p-torrentlocation.png" alt="Distribute your site as a torrent." title="" /></li>
<li>[Started] <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>[Started] <strong>Provide</strong> alternate, in-I2P destinations for web sites that want to
mirror their content within I2P.</li>
<li>[Started] <strong>Enhance</strong> the I2P browsing experience by allowing site developers
<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 src="x-i2p-torrentlocation.png" alt="Distribute your site as a torrent." 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 src="i2p-https.png" alt="Use HTTPS with your I2P Site." 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

View File

@@ -1,20 +1,19 @@
body,
html {
width: 450px
width: 600px
}
.panel {
margin: 5px;
width: 450px;
height: 450px
width: 500px
}
.panel-section-header {
width: 450px
width: 500px
}
#text-section-torrents-header {
width: 450px
width: 500px
}
span.identity {
width: 450px;
width: 500px;
display: block;
margin-left: 1em
}

121
info.js
View File

@@ -1,10 +1,10 @@
function checkPeerConnection() {
let getting = browser.privacy.network.peerConnectionEnabled.get({});
getting.then(got => {
getting.then((got) => {
let webrtc = got.value;
console.log('checking webrtc', webrtc);
if (document.getElementById('enable-web-rtc') !== null)
document.getElementById('enable-web-rtc').checked = webrtc;
console.log("checking webrtc", webrtc);
if (document.getElementById("enable-web-rtc") !== null)
document.getElementById("enable-web-rtc").checked = webrtc;
});
}
@@ -14,7 +14,7 @@ function checkSnowflake() {
try {
function snowflake(snowflake) {
console.log("snowflake plugin found, leaving WebRTC alone", snowflake);
EnablePeerConnection();
AssurePeerConnection();
}
var snowflakeInfo = browser.management.get(
"{b11bea1f-a888-4332-8d8a-cec2be7d24b9}" // string
@@ -29,7 +29,7 @@ checkSnowflake();
function checkHistory() {
let getting = browser.storage.local.get("disable_history");
getting.then(got => {
getting.then((got) => {
let disable_history = got.disable_history;
if (disable_history == undefined) {
disable_history = false;
@@ -42,11 +42,11 @@ function checkHistory() {
checkHistory();
document.addEventListener("click", clickEvent => {
document.addEventListener("click", (clickEvent) => {
if (clickEvent.target.id === "window-create-help-panel") {
let createData = {
type: "panel",
incognito: true
incognito: true,
};
let creating = browser.tabs.create(createData);
creating.then(() => {
@@ -55,12 +55,15 @@ document.addEventListener("click", clickEvent => {
} else if (clickEvent.target.id === "window-create-news-panel") {
let createData = {
type: "panel",
incognito: true
incognito: true,
};
let creating = browser.tabs.create(createData);
creating.then(() => {
console.log("The news panel has been created");
});
} else if (clickEvent.target.id === "visit-irc") {
browser.sidebarAction.setPanel({ panel: "http://127.0.0.1:7669" });
browser.sidebarAction.open();
} else if (clickEvent.target.id === "generate-fresh-tunnel") {
function refreshIdentity() {
console.log("Generating new identity");
@@ -68,7 +71,7 @@ document.addEventListener("click", clickEvent => {
const url = "http://" + controlHost + ":" + controlPort;
Http.open("GET", url);
Http.send();
Http.onreadystatechange = event => {
Http.onreadystatechange = (event) => {
console.log(Http.responseText);
};
}
@@ -80,28 +83,30 @@ document.addEventListener("click", clickEvent => {
console.log("attempting to initiate graceful shutdown");
RouterManager("ShutdownGraceful");
} else if (clickEvent.target.id === "label-router-status") {
if (document.getElementById("label-status-list").style.display !== "none"){
if (document.getElementById("label-status-list").style.display !== "none") {
console.log("hiding label-status-list");
document.getElementById("label-status-list").style.display = "none"
}else{
document.getElementById("label-status-list").style.display = "none";
} else {
console.log("showing label-status-list");
document.getElementById("label-status-list").style.display = "block"
document.getElementById("label-status-list").style.display = "block";
}
} else if (clickEvent.target.id === "label-router-peers") {
if (document.getElementById("label-peers-list").style.display !== "none"){
if (document.getElementById("label-peers-list").style.display !== "none") {
console.log("hiding label-peers-list");
document.getElementById("label-peers-list").style.display = "none"
}else{
document.getElementById("label-peers-list").style.display = "none";
} else {
console.log("showing label-peers-list");
document.getElementById("label-peers-list").style.display = "block"
document.getElementById("label-peers-list").style.display = "block";
}
} else if (clickEvent.target.id === "label-router-bandwidth") {
if (document.getElementById("label-bandwidth-list").style.display !== "none"){
if (
document.getElementById("label-bandwidth-list").style.display !== "none"
) {
console.log("hiding label-bandwidth-list");
document.getElementById("label-bandwidth-list").style.display = "none"
}else{
document.getElementById("label-bandwidth-list").style.display = "none";
} else {
console.log("showing label-bandwidth-list");
document.getElementById("label-bandwidth-list").style.display = "block"
document.getElementById("label-bandwidth-list").style.display = "block";
}
} else if (clickEvent.target.id === "search-submit") {
console.log("attempting to create search tab");
@@ -118,6 +123,12 @@ document.addEventListener("click", clickEvent => {
} else if (clickEvent.target.id === "window-visit-index") {
console.log("attempting to create index tab");
goIndex();
} else if (clickEvent.target.id === "window-visit-torrent") {
console.log("attempting to create torrent tab");
goTorrent();
} else if (clickEvent.target.id === "window-visit-help") {
console.log("attempting to create torrent tab");
goHelp();
} else if (clickEvent.target.id === "window-visit-homepage") {
console.log("attempting to create homepage tab");
goHome();
@@ -157,21 +168,21 @@ document.addEventListener("click", clickEvent => {
clickEvent.preventDefault();
});
window.onload = function(e){
window.onload = function (e) {
if (document.getElementById("label-peers-list") != null) {
document.getElementById("label-peers-list").style.display = "none"
document.getElementById("label-peers-list").style.display = "none";
}
if (document.getElementById("label-bandwidth-list") != null) {
document.getElementById("label-bandwidth-list").style.display = "none"
document.getElementById("label-bandwidth-list").style.display = "none";
}
}
};
function proxyReadiness() {
console.log(this.responseText);
}
var gettingInfo = browser.runtime.getPlatformInfo();
gettingInfo.then(got => {
gettingInfo.then((got) => {
if (got.os != "android") {
browser.history.onVisited.addListener(onVisited);
}
@@ -192,18 +203,21 @@ function showTorrentsMenu() {
}
function goHome() {
function onTabError() {
console.log("Help tab created");
}
function gotProxyInfo(info) {
let port = info.value.http.split(":")[1];
if (port == "7644") {
let createRhizomeData = {
url: "about:I2p"
url: "about:I2p",
};
console.log("visiting homepage");
let creating = browser.tabs.create(createRhizomeData);
creating.then(onTabCreated, onTabError);
} else {
let createData = {
url: "home.html"
url: "home.html",
};
console.log("visiting homepage");
let creating = browser.tabs.create(createData);
@@ -218,16 +232,40 @@ function goHome() {
function goIndex() {
function onTabError() {
console.log("Help tab created");
console.log("Help tab not created");
}
let createData = {
url: "index.html"
url: "index.html",
};
console.log("visiting help");
let creating = browser.tabs.create(createData);
creating.then(onTabCreated, onTabError);
}
function goTorrent() {
function onTabError() {
console.log("Torrent Help tab not created");
}
let createData = {
url: "torrent/index.html",
};
console.log("visiting torrent help");
let creating = browser.tabs.create(createData);
creating.then(onTabCreated, onTabError);
}
function goHelp() {
function onTabError() {
console.log("Torrent Help tab not created");
}
let createData = {
url: "i2pcontrol/index.html",
};
console.log("visiting torrent help");
let creating = browser.tabs.create(createData);
creating.then(onTabCreated, onTabError);
}
function goToopie() {
function onTabError() {
console.log("Toopie tab created");
@@ -249,7 +287,7 @@ function goSearch() {
url:
"http://yacy.idk.i2p/yacysearch.html?" +
"query=" +
document.getElementById("search-query").value
document.getElementById("search-query").value,
};
console.log("visiting legwork");
let creating = browser.tabs.create(createData);
@@ -267,7 +305,7 @@ function goTunnel() {
console.log("I2PTunnel tab created");
}
let createData = {
url: "http://" + routerAddr() + "/i2ptunnel"
url: "http://" + routerAddr() + "/i2ptunnel",
};
console.log("visiting i2ptunnel");
let creating = browser.tabs.create(createData);
@@ -279,7 +317,7 @@ function goMail() {
console.log("Mail tab created");
}
let createData = {
url: "http://" + routerAddr() + "/susimail"
url: "http://" + routerAddr() + "/susimail",
};
console.log("visiting mail");
let creating = browser.tabs.create(createData);
@@ -291,7 +329,7 @@ function goSnark() {
console.log("Snark tab created");
}
let createData = {
url: "http://" + routerAddr() + "/i2psnark"
url: "http://" + routerAddr() + "/i2psnark",
};
console.log("visiting snark");
let creating = browser.tabs.create(createData);
@@ -310,7 +348,7 @@ function onVisited(historyItem) {
function onRemoved() {
var searching = browser.history.search({
text: historyItem.url,
startTime: 0
startTime: 0,
});
searching.then(onCleaned);
}
@@ -327,6 +365,15 @@ if (UpdateContents !== undefined) UpdateContents();
const minutes = 0.2;
const interval = minutes * 60 * 1000;
setInterval(function() {
setInterval(function () {
if (UpdateContents !== undefined) UpdateContents();
}, interval);
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");
}
}
});

Binary file not shown.

Before

Width:  |  Height:  |  Size: 237 KiB

After

Width:  |  Height:  |  Size: 97 KiB

View File

@@ -4,7 +4,7 @@
<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">-->
<!--<link href="info.css" rel="stylesheet">--><!--<link href="torrent/popup.css" rel="stylesheet">-->
<title>
</title>

View File

@@ -1,15 +1,14 @@
function gotCurrent(tab) {
function gotTitle(title) {
let addr = title;
document.getElementById('TypeInfo').innerHTML = '<div class=\"AddressInfo\"><a href=\"' + addr + '\">' + addr + '</a></div>';
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
tabId: tab[0].id,
});
gettingTitle.then(gotTitle);
}
function tabError(error) {

View File

@@ -2,7 +2,7 @@
"applications": {
"gecko": {
"id": "i2ppb@eyedeekay.github.io",
"strict_min_version": "60.0"
"strict_min_version": "64.0"
}
},
"permissions": [
@@ -16,6 +16,7 @@
"proxy",
"privacy",
"storage",
"webNavigation",
"webRequest",
"webRequestBlocking",
"contextualIdentities",
@@ -26,7 +27,7 @@
],
"manifest_version": 2,
"name": "__MSG_extensionName__",
"version": "0.77",
"version": "0.107",
"description": "__MSG_extensionDescription__",
"homepage_url": "https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox",
"icons": {
@@ -48,7 +49,7 @@
"page_action": {
"browser_style": true,
"default_title": "__MSG_toopieTLS__",
"default_icon": "icons/toopie.png",
"default_icon": "icons/i2plogo.png",
"show_matches": [
"http://*.i2p/*",
"https://*.i2p/*",

BIN
menu.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 300 KiB

View File

@@ -19,11 +19,17 @@
</select>
</section>
<section class="scheme-options">
<span class="title">Bookmarks Status:</span>
<input type="checkbox" id="bookmarksState" name="bookmarksstate" value="bookmarksstate">
<label for="bookmarksState">Bookmarks were created at install-time.</tv>
<button type="submit" id="bookmarksButton">Re-Create Bookmarks</button>
</section>
<section class="scheme-options proxy-options" id="proxy-options">
<div class="title">
Proxy Options
</div>
<p id="proxyHelpText">
</p>
<label id="portText">Host:</label> <input data="host" id="host" type="text" value="127.0.0.1">
@@ -83,7 +89,8 @@
</div>
</section>
<input id="save-button" type="button" value="Save preferences">
<script src="options.js"></script> <!--<script src="/torrent/browser-polyfill.min.js"></script>
<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,151 +1,171 @@
function SetBookButton() {
// var bmid = document.getElementById("bookmark");
//bmid.textContent = chrome.i18n.getMessage("bookmarkButton");
}
function SetHostText() {
var hostid = document.getElementById('hostText');
hostid.textContent = chrome.i18n.getMessage('hostText');
var hostid = document.getElementById("hostText");
hostid.textContent = chrome.i18n.getMessage("hostText");
}
function SetPortText() {
var portid = document.getElementById('portText');
portid.textContent = chrome.i18n.getMessage('portText');
var portid = document.getElementById("portText");
portid.textContent = chrome.i18n.getMessage("portText");
}
function SetPortHelpText() {
var portid = document.getElementById('proxyHelpText');
portid.textContent = chrome.i18n.getMessage('proxyHelpText');
var portid = document.getElementById("proxyHelpText");
portid.textContent = chrome.i18n.getMessage("proxyHelpText");
}
function SetControlHostText() {
var controlhostid = document.getElementById('controlHostText');
controlhostid.textContent = chrome.i18n.getMessage('controlHostText');
var controlhostid = document.getElementById("controlHostText");
controlhostid.textContent = chrome.i18n.getMessage("controlHostText");
}
function SetControlPortText() {
var controlportid = document.getElementById('controlPortText');
controlportid.textContent = chrome.i18n.getMessage('controlPortText');
var controlportid = document.getElementById("controlPortText");
controlportid.textContent = chrome.i18n.getMessage("controlPortText");
}
function SetControlHelpText() {
var portid = document.getElementById('controlHelpText');
portid.textContent = chrome.i18n.getMessage('controlHelpText');
var portid = document.getElementById("controlHelpText");
portid.textContent = chrome.i18n.getMessage("controlHelpText");
}
function getBookmarksCreated() {
bookmarks_state = document.getElementById("bookmarks");
console.log("(options)Got i2p bookmarks state:", bookmarks_state);
if (bookmarks_state == undefined) {
return false;
}
if (bookmarks_state.value == "false") {
return false;
}
if (bookmarks_state.value == "true") {
return true;
}
return false;
}
function getScheme() {
const proxy_scheme = document.querySelector('#proxy_scheme');
console.log('(options)Got i2p proxy scheme:', proxy_scheme.value);
if (proxy_scheme.value == 'HTTP') {
return 'http';
const proxy_scheme = document.querySelector("#proxy_scheme");
console.log("(options)Got i2p proxy scheme:", proxy_scheme.value);
if (proxy_scheme.value == "HTTP") {
return "http";
}
if (proxy_scheme.value == 'SOCKS') {
return 'socks';
if (proxy_scheme.value == "SOCKS") {
return "socks";
}
if (proxy_scheme.value == 'http') return 'http';
if (proxy_scheme.value == 'socks') return 'socks';
else return 'http';
if (proxy_scheme.value == "http") return "http";
if (proxy_scheme.value == "socks") return "socks";
else return "http";
}
function getHost() {
proxy_host = document.getElementById('host').value;
console.log('(options)Got i2p proxy host:', proxy_host);
proxy_host = document.getElementById("host").value;
console.log("(options)Got i2p proxy host:", proxy_host);
if (proxy_host == undefined) {
return '127.0.0.1';
return "127.0.0.1";
}
return proxy_host;
}
function getPort() {
proxy_port = document.getElementById('port').value;
console.log('(options)Got i2p proxy port:', proxy_port);
proxy_port = document.getElementById("port").value;
console.log("(options)Got i2p proxy port:", proxy_port);
if (proxy_port == undefined) {
return '4444';
return "4444";
}
return proxy_port;
}
function getControlHost() {
control_host = document.getElementById('controlhost').value;
console.log('(options)Got i2p control host:', control_host);
control_host = document.getElementById("controlhost").value;
console.log("(options)Got i2p control host:", control_host);
if (control_host == undefined) {
return '127.0.0.1';
return "127.0.0.1";
}
return control_host;
}
function getControlPort() {
control_port = document.getElementById('controlport').value;
console.log('(options)Got i2p control port:', control_port);
control_port = document.getElementById("controlport").value;
console.log("(options)Got i2p control port:", control_port);
if (control_port == undefined) {
return '4444';
return "4444";
}
return control_port;
}
function getRPCHost() {
rpc_host = document.getElementById('rpchost').value;
console.log('(options)Got i2pcontrol rpc host:', rpc_host);
rpc_host = document.getElementById("rpchost").value;
console.log("(options)Got i2pcontrol rpc host:", rpc_host);
if (rpc_host == undefined) {
return '127.0.0.1';
return "127.0.0.1";
}
return rpc_host;
}
function getRPCPort() {
rpc_port = document.getElementById('rpcport').value;
console.log('(options)Got i2pcontrol rpc port:', rpc_port);
rpc_port = document.getElementById("rpcport").value;
console.log("(options)Got i2pcontrol rpc port:", rpc_port);
if (rpc_port == undefined) {
return '7657';
return "7657";
}
return rpc_port;
}
function getRPCPath() {
rpc_path = document.getElementById('rpcpath').value;
console.log('(options)Got i2pcontrol rpc path:', rpc_path);
rpc_path = document.getElementById("rpcpath").value;
console.log("(options)Got i2pcontrol rpc path:", rpc_path);
if (rpc_path == undefined) {
return 'jsonrpc';
return "jsonrpc";
}
return rpc_path;
}
function getRPCPass() {
rpc_pass = document.getElementById('rpcpass').value;
console.log('(options)Got i2pcontrol rpc password:');
rpc_pass = document.getElementById("rpcpass").value;
console.log("(options)Got i2pcontrol rpc password:");
if (rpc_pass == undefined) {
return 'itoopie';
return "itoopie";
}
return rpc_pass;
}
function getBTRPCHost() {
bt_rpc_host = document.getElementById('btrpchost').value;
console.log('(options)Got torrent rpc host:', bt_rpc_host);
bt_rpc_host = document.getElementById("btrpchost").value;
console.log("(options)Got torrent rpc host:", bt_rpc_host);
if (bt_rpc_host == undefined) {
return '127.0.0.1';
return "127.0.0.1";
}
return bt_rpc_host;
}
function getBTRPCPort() {
bt_rpc_port = document.getElementById('btrpcport').value;
console.log('(options)Got torrent rpc port:', bt_rpc_port);
bt_rpc_port = document.getElementById("btrpcport").value;
console.log("(options)Got torrent rpc port:", bt_rpc_port);
if (bt_rpc_port == undefined) {
return '7657';
return "7657";
}
return bt_rpc_port;
}
function getBTRPCPath() {
bt_rpc_path = document.getElementById('btrpcpath').value;
console.log('(options)Got torrent rpc path:', bt_rpc_path);
bt_rpc_path = document.getElementById("btrpcpath").value;
console.log("(options)Got torrent rpc path:", bt_rpc_path);
if (bt_rpc_path == undefined) {
return 'transmission/rpc';
return "transmission/rpc";
}
return bt_rpc_path;
}
function getBTRPCPass() {
bt_rpc_pass = document.getElementById('btrpcpass').value;
console.log('(options)Got torrent rpc password:');
bt_rpc_pass = document.getElementById("btrpcpass").value;
console.log("(options)Got torrent rpc password:");
if (bt_rpc_pass == undefined) {
return 'itoopie';
return "itoopie";
}
return bt_rpc_pass;
}
@@ -153,85 +173,88 @@ function getBTRPCPass() {
function checkStoredSettings(storedSettings) {
function gotProxyInfo(info) {
let defaultSettings = {};
let host = info.value.http.split(':')[0];
let port = info.value.http.split(':')[1];
let host = info.value.http.split(":")[0];
let port = info.value.http.split(":")[1];
if (port != 7644) {
port = undefined;
}
console.log('(options)proxy', "'" + host + "'", ':', port);
if (!storedSettings['proxy_scheme'])
defaultSettings['proxy_scheme'] = 'http';
else defaultSettings['proxy_scheme'] = storedSettings['proxy_scheme'];
if (!storedSettings['proxy_host']) {
if (host == '') defaultSettings['proxy_host'] = '127.0.0.1';
else defaultSettings['proxy_host'] = host;
} else defaultSettings['proxy_host'] = storedSettings['proxy_host'];
console.log("(options)proxy", "'" + host + "'", ":", port);
if (!storedSettings["bookmarks_state"])
defaultSettings["bookmarks_state"] = false;
else defaultSettings["bookmarks_state"] = storedSettings["bookmarks_state"];
if (!storedSettings["proxy_scheme"])
defaultSettings["proxy_scheme"] = "http";
else defaultSettings["proxy_scheme"] = storedSettings["proxy_scheme"];
if (!storedSettings["proxy_host"]) {
if (host == "") defaultSettings["proxy_host"] = "127.0.0.1";
else defaultSettings["proxy_host"] = host;
} else defaultSettings["proxy_host"] = storedSettings["proxy_host"];
if (!storedSettings['proxy_port']) {
if (port == undefined) defaultSettings['proxy_port'] = 4444;
else if (port == 7644) defaultSettings['proxy_port'] = port;
else defaultSettings['proxy_port'] = 4444;
} else defaultSettings['proxy_port'] = storedSettings.proxy_port;
if (!storedSettings["proxy_port"]) {
if (port == undefined) defaultSettings["proxy_port"] = 4444;
else if (port == 7644) defaultSettings["proxy_port"] = port;
else defaultSettings["proxy_port"] = 4444;
} 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 defaultSettings['control_host'] = storedSettings.control_host;
if (!storedSettings["control_host"]) {
if (host == "") defaultSettings["control_host"] = "127.0.0.1";
else defaultSettings["control_host"] = host;
} else defaultSettings["control_host"] = storedSettings.control_host;
if (!storedSettings['control_port']) {
defaultSettings['control_port'] = 7657;
} else defaultSettings['control_port'] = storedSettings.control_port;
if (!storedSettings["control_port"]) {
defaultSettings["control_port"] = 7657;
} else defaultSettings["control_port"] = storedSettings.control_port;
if (!storedSettings['rpc_host']) {
if (host == '') defaultSettings['rpc_host'] = '127.0.0.1';
else defaultSettings['rpc_host'] = host;
} else defaultSettings['rpc_host'] = storedSettings.rpc_host;
if (!storedSettings["rpc_host"]) {
if (host == "") defaultSettings["rpc_host"] = "127.0.0.1";
else defaultSettings["rpc_host"] = host;
} else defaultSettings["rpc_host"] = storedSettings.rpc_host;
if (!storedSettings['rpc_port']) {
defaultSettings['rpc_port'] = 7657;
} else defaultSettings['rpc_port'] = storedSettings.rpc_port;
if (!storedSettings["rpc_port"]) {
defaultSettings["rpc_port"] = 7657;
} else defaultSettings["rpc_port"] = storedSettings.rpc_port;
if (!storedSettings['rpc_path']) {
defaultSettings['rpc_path'] = 'jsonrpc';
} else defaultSettings['rpc_path'] = storedSettings.rpc_path;
if (!storedSettings["rpc_path"]) {
defaultSettings["rpc_path"] = "jsonrpc";
} else defaultSettings["rpc_path"] = storedSettings.rpc_path;
if (!storedSettings['rpc_pass']) {
defaultSettings['rpc_pass'] = 'itoopie';
} else defaultSettings['rpc_pass'] = storedSettings.rpc_pass;
if (!storedSettings["rpc_pass"]) {
defaultSettings["rpc_pass"] = "itoopie";
} else defaultSettings["rpc_pass"] = storedSettings.rpc_pass;
if (!storedSettings['bt_rpc_host']) {
if (host == '') defaultSettings['bt_rpc_host'] = '127.0.0.1';
else defaultSettings['bt_rpc_host'] = host;
} else defaultSettings['bt_rpc_host'] = storedSettings.bt_rpc_host;
if (!storedSettings["bt_rpc_host"]) {
if (host == "") defaultSettings["bt_rpc_host"] = "127.0.0.1";
else defaultSettings["bt_rpc_host"] = host;
} else defaultSettings["bt_rpc_host"] = storedSettings.bt_rpc_host;
if (!storedSettings['bt_rpc_port']) {
defaultSettings['bt_rpc_port'] = 7657;
} else defaultSettings['bt_rpc_port'] = storedSettings.bt_rpc_port;
if (!storedSettings["bt_rpc_port"]) {
defaultSettings["bt_rpc_port"] = 7657;
} else defaultSettings["bt_rpc_port"] = storedSettings.bt_rpc_port;
if (!storedSettings['bt_rpc_path']) {
defaultSettings['bt_rpc_path'] = 'transmission/';
} else defaultSettings['bt_rpc_path'] = storedSettings.bt_rpc_path;
if (!storedSettings["bt_rpc_path"]) {
defaultSettings["bt_rpc_path"] = "transmission/";
} else defaultSettings["bt_rpc_path"] = storedSettings.bt_rpc_path;
if (!storedSettings['bt_rpc_pass']) {
defaultSettings['bt_rpc_pass'] = 'transmission';
} else defaultSettings['bt_rpc_pass'] = storedSettings.bt_rpc_pass;
if (!storedSettings["bt_rpc_pass"]) {
defaultSettings["bt_rpc_pass"] = "transmission";
} else defaultSettings["bt_rpc_pass"] = storedSettings.bt_rpc_pass;
console.log('(options)(browserinfo) NATIVE PROXYSETTINGS', info.value);
defaultSettings['base_url'] =
'http://' +
defaultSettings['bt_rpc_host'] +
':' +
defaultSettings['bt_rpc_port'] +
'/' +
defaultSettings['bt_rpc_path'];
console.log("(options)(browserinfo) NATIVE PROXYSETTINGS", info.value);
defaultSettings["base_url"] =
"http://" +
defaultSettings["bt_rpc_host"] +
":" +
defaultSettings["bt_rpc_port"] +
"/" +
defaultSettings["bt_rpc_path"];
console.log(
'(options)',
defaultSettings['proxy_scheme'],
defaultSettings['proxy_host'],
defaultSettings['proxy_port'],
defaultSettings['control_host'],
defaultSettings['control_port'],
defaultSettings['base_url']
"(options)",
defaultSettings["proxy_scheme"],
defaultSettings["proxy_host"],
defaultSettings["proxy_port"],
defaultSettings["control_host"],
defaultSettings["control_port"],
defaultSettings["base_url"]
);
chrome.storage.local.set(defaultSettings);
@@ -243,72 +266,75 @@ function checkStoredSettings(storedSettings) {
function checkAndroidStoredSettings(storedSettings) {
let defaultSettings = {};
let host = '';
let port = '';
if (!storedSettings['proxy_scheme']) defaultSettings['proxy_scheme'] = 'http';
else defaultSettings['proxy_scheme'] = storedSettings['proxy_scheme'];
if (!storedSettings['proxy_host']) {
if (host == '') defaultSettings['proxy_host'] = '127.0.0.1';
else defaultSettings['proxy_host'] = host;
} else defaultSettings['proxy_host'] = storedSettings['proxy_host'];
let host = "";
let port = "";
if (!storedSettings["bookmarks_state"])
defaultSettings["bookmarks_state"] = false;
else defaultSettings["bookmarks_state"] = storedSettings["bookmarks_state"];
if (!storedSettings["proxy_scheme"]) defaultSettings["proxy_scheme"] = "http";
else defaultSettings["proxy_scheme"] = storedSettings["proxy_scheme"];
if (!storedSettings["proxy_host"]) {
if (host == "") defaultSettings["proxy_host"] = "127.0.0.1";
else defaultSettings["proxy_host"] = host;
} else defaultSettings["proxy_host"] = storedSettings["proxy_host"];
if (!storedSettings['proxy_port']) {
if (port == undefined) defaultSettings['proxy_port'] = 4444;
else if (port == 7644) defaultSettings['proxy_port'] = port;
else defaultSettings['proxy_port'] = 4444;
} else defaultSettings['proxy_port'] = storedSettings.proxy_port;
if (!storedSettings["proxy_port"]) {
if (port == undefined) defaultSettings["proxy_port"] = 4444;
else if (port == 7644) defaultSettings["proxy_port"] = port;
else defaultSettings["proxy_port"] = 4444;
} 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 defaultSettings['control_host'] = storedSettings.control_host;
if (!storedSettings["control_host"]) {
if (host == "") defaultSettings["control_host"] = "127.0.0.1";
else defaultSettings["control_host"] = host;
} else defaultSettings["control_host"] = storedSettings.control_host;
if (!storedSettings['control_port']) {
defaultSettings['control_port'] = 7657;
} else defaultSettings['control_port'] = storedSettings.control_port;
if (!storedSettings["control_port"]) {
defaultSettings["control_port"] = 7657;
} else defaultSettings["control_port"] = storedSettings.control_port;
if (!storedSettings['rpc_host']) {
if (host == '') defaultSettings['rpc_host'] = '127.0.0.1';
else defaultSettings['rpc_host'] = host;
} else defaultSettings['rpc_host'] = storedSettings.rpc_host;
if (!storedSettings["rpc_host"]) {
if (host == "") defaultSettings["rpc_host"] = "127.0.0.1";
else defaultSettings["rpc_host"] = host;
} else defaultSettings["rpc_host"] = storedSettings.rpc_host;
if (!storedSettings['rpc_port']) {
defaultSettings['rpc_port'] = 7657;
} else defaultSettings['rpc_port'] = storedSettings.rpc_port;
if (!storedSettings["rpc_port"]) {
defaultSettings["rpc_port"] = 7657;
} else defaultSettings["rpc_port"] = storedSettings.rpc_port;
if (!storedSettings['rpc_path']) {
defaultSettings['rpc_path'] = 'jsonrpc';
} else defaultSettings['rpc_path'] = storedSettings.rpc_path;
if (!storedSettings["rpc_path"]) {
defaultSettings["rpc_path"] = "jsonrpc";
} else defaultSettings["rpc_path"] = storedSettings.rpc_path;
if (!storedSettings['rpc_pass']) {
defaultSettings['rpc_pass'] = 'itoopie';
} else defaultSettings['rpc_pass'] = storedSettings.rpc_pass;
if (!storedSettings["rpc_pass"]) {
defaultSettings["rpc_pass"] = "itoopie";
} else defaultSettings["rpc_pass"] = storedSettings.rpc_pass;
if (!storedSettings['bt_rpc_host']) {
if (host == '') defaultSettings['bt_rpc_host'] = '127.0.0.1';
else defaultSettings['bt_rpc_host'] = host;
} else defaultSettings['bt_rpc_host'] = storedSettings.bt_rpc_host;
if (!storedSettings["bt_rpc_host"]) {
if (host == "") defaultSettings["bt_rpc_host"] = "127.0.0.1";
else defaultSettings["bt_rpc_host"] = host;
} else defaultSettings["bt_rpc_host"] = storedSettings.bt_rpc_host;
if (!storedSettings['bt_rpc_port']) {
defaultSettings['bt_rpc_port'] = 7657;
} else defaultSettings['bt_rpc_port'] = storedSettings.bt_rpc_port;
if (!storedSettings["bt_rpc_port"]) {
defaultSettings["bt_rpc_port"] = 7657;
} else defaultSettings["bt_rpc_port"] = storedSettings.bt_rpc_port;
if (!storedSettings['bt_rpc_path']) {
defaultSettings['bt_rpc_path'] = 'transmission/rpc';
} else defaultSettings['bt_rpc_path'] = storedSettings.bt_rpc_path;
if (!storedSettings["bt_rpc_path"]) {
defaultSettings["bt_rpc_path"] = "transmission/rpc";
} else defaultSettings["bt_rpc_path"] = storedSettings.bt_rpc_path;
if (!storedSettings['bt_rpc_pass']) {
defaultSettings['bt_rpc_pass'] = 'transmission';
} else defaultSettings['bt_rpc_pass'] = storedSettings.bt_rpc_pass;
if (!storedSettings["bt_rpc_pass"]) {
defaultSettings["bt_rpc_pass"] = "transmission";
} else defaultSettings["bt_rpc_pass"] = storedSettings.bt_rpc_pass;
console.log('(options)(browserinfo) NATIVE PROXYSETTINGS', info.value);
console.log("(options)(browserinfo) NATIVE PROXYSETTINGS", info.value);
console.log(
'(options)',
defaultSettings['proxy_scheme'],
defaultSettings['proxy_host'],
defaultSettings['proxy_port'],
defaultSettings['control_host'],
defaultSettings['control_port']
"(options)",
defaultSettings["proxy_scheme"],
defaultSettings["proxy_host"],
defaultSettings["proxy_port"],
defaultSettings["control_host"],
defaultSettings["control_port"]
);
chrome.storage.local.set(defaultSettings);
return defaultSettings;
@@ -320,84 +346,90 @@ function onError(e) {
function storeSettings() {
let storableSettings = {};
storableSettings['proxy_scheme'] = getScheme();
storableSettings['proxy_host'] = getHost();
storableSettings['proxy_port'] = getPort();
storableSettings['control_host'] = getControlHost();
storableSettings['control_port'] = getControlPort();
storableSettings['rpc_host'] = getRPCHost();
storableSettings['rpc_port'] = getRPCPort();
storableSettings['rpc_path'] = getRPCPath();
storableSettings['rpc_pass'] = getRPCPass();
storableSettings['bt_rpc_host'] = getBTRPCHost();
storableSettings['bt_rpc_port'] = getBTRPCPort();
storableSettings['bt_rpc_path'] = getBTRPCPath();
storableSettings['bt_rpc_pass'] = getBTRPCPass();
storableSettings['base_url'] =
'http://' + bt_rpc_host + ':' + bt_rpc_port + '/' + bt_rpc_path;
console.log('storing', storableSettings);
storableSettings["bookmarks_state"] = getBookmarksCreated();
storableSettings["proxy_scheme"] = getScheme();
storableSettings["proxy_host"] = getHost();
storableSettings["proxy_port"] = getPort();
storableSettings["control_host"] = getControlHost();
storableSettings["control_port"] = getControlPort();
storableSettings["rpc_host"] = getRPCHost();
storableSettings["rpc_port"] = getRPCPort();
storableSettings["rpc_path"] = getRPCPath();
storableSettings["rpc_pass"] = getRPCPass();
storableSettings["bt_rpc_host"] = getBTRPCHost();
storableSettings["bt_rpc_port"] = getBTRPCPort();
storableSettings["bt_rpc_path"] = getBTRPCPath();
storableSettings["bt_rpc_pass"] = getBTRPCPass();
storableSettings["base_url"] =
"http://" + bt_rpc_host + ":" + bt_rpc_port + "/" + bt_rpc_path;
console.log("storing", storableSettings);
chrome.storage.local.set(storableSettings);
}
function updateUI(restoredSettings) {
const selectList = document.querySelector('#proxy_scheme');
if (selectList == undefined) selectList.value = restoredSettings.proxy_scheme;
const selectList = document.querySelector("#proxy_scheme");
if (selectList != undefined) selectList.value = restoredSettings.proxy_scheme;
//console.log("(options)showing proxy scheme:", selectList.value);
const hostitem = document.getElementById('host');
if (hostitem == undefined) hostitem.value = restoredSettings.proxy_host;
console.log(restoredSettings);
const bms = document.getElementById("bookmarksState");
if (bms != undefined) bms.checked = restoredSettings.bookmarks_state;
const hostitem = document.getElementById("host");
if (hostitem != undefined) hostitem.value = restoredSettings.proxy_host;
//console.log("(options)showing proxy host:", hostitem.value);
const portitem = document.getElementById('port');
if (portitem == undefined) portitem.value = restoredSettings.proxy_port;
const portitem = document.getElementById("port");
if (portitem != undefined) portitem.value = restoredSettings.proxy_port;
//console.log("(options)showing proxy port:", portitem.value);
const controlhostitem = document.getElementById('controlhost');
const controlhostitem = document.getElementById("controlhost");
if (controlhostitem == undefined)
controlhostitem.value = restoredSettings.control_host;
//console.log("(options)showing control host:", controlhostitem.value);
const controlportitem = document.getElementById('controlport');
const controlportitem = document.getElementById("controlport");
if (controlportitem == undefined)
controlportitem.value = restoredSettings.control_port;
//console.log("(options)showing control port:", controlportitem.value);
const rpchostitem = document.getElementById('rpchost');
if (rpchostitem == undefined) rpchostitem.value = restoredSettings.rpc_host;
const rpchostitem = document.getElementById("rpchost");
if (rpchostitem != undefined) rpchostitem.value = restoredSettings.rpc_host;
//console.log("(options)showing rpc host:", rpchostitem.value);
const rpcportitem = document.getElementById('rpcport');
if (rpcportitem == undefined) rpcportitem.value = restoredSettings.rpc_port;
const rpcportitem = document.getElementById("rpcport");
if (rpcportitem != undefined) rpcportitem.value = restoredSettings.rpc_port;
//console.log("(options)showing rpc port:", rpcportitem.value);
const rpcpathitem = document.getElementById('rpcpath');
if (rpcpathitem == undefined) rpcpathitem.value = restoredSettings.rpc_path;
const rpcpathitem = document.getElementById("rpcpath");
if (rpcpathitem != undefined) rpcpathitem.value = restoredSettings.rpc_path;
//console.log("(options)showing rpc path:", rpcpathitem.value);
const rpcpassitem = document.getElementById('rpcpass');
if (rpcpassitem == undefined) rpcpassitem.value = restoredSettings.rpc_pass;
const rpcpassitem = document.getElementById("rpcpass");
if (rpcpassitem != undefined) rpcpassitem.value = restoredSettings.rpc_pass;
//console.log("(options)showing rpc pass:");
const btrpchostitem = document.getElementById('btrpchost');
if (btrpchostitem == undefined)
btrpchostitem.value = restoredSettings.rpc_host;
const btrpchostitem = document.getElementById("btrpchost");
if (btrpchostitem != undefined)
btrpchostitem.value = restoredSettings.bt_rpc_host;
//console.log("(options)showing bt rpc host:", btrpchostitem.value);
const btrpcportitem = document.getElementById('btrpcport');
if (btrpcportitem == undefined)
btrpcportitem.value = restoredSettings.rpc_port;
const btrpcportitem = document.getElementById("btrpcport");
if (btrpcportitem != undefined)
btrpcportitem.value = restoredSettings.bt_rpc_port;
//console.log("(options)showing rbt pc port:", rpcportitem.value);
const btrpcpathitem = document.getElementById('btrpcpath');
if (btrpcpathitem == undefined)
btrpcpathitem.value = restoredSettings.rpc_path;
const btrpcpathitem = document.getElementById("btrpcpath");
if (btrpcpathitem != undefined)
btrpcpathitem.value = restoredSettings.bt_rpc_path;
//console.log("(options)showing bt rpc path:", btrpcpathitem.value);
const btrpcpassitem = document.getElementById('btrpcpass');
if (btrpcpassitem == undefined)
btrpcpassitem.value = restoredSettings.rpc_pass;
const btrpcpassitem = document.getElementById("btrpcpass");
if (btrpcpassitem != undefined)
btrpcpassitem.value = restoredSettings.bt_rpc_pass;
//console.log("(options)showing bt rpc pass:");
SetBookButton();
SetHostText();
SetPortText();
SetPortHelpText();
@@ -411,19 +443,19 @@ function onError(e) {
}
var gettingInfo = browser.runtime.getPlatformInfo();
gettingInfo.then(got => {
if (got.os != 'android') {
chrome.storage.local.get(function(got) {
gettingInfo.then((got) => {
if (got.os != "android") {
chrome.storage.local.get(function (got) {
let settings = checkStoredSettings(got);
settings.then(updateUI);
});
} else {
chrome.storage.local.get(function(got) {
chrome.storage.local.get(function (got) {
checkAndroidStoredSettings(got);
updateUI(got);
});
}
});
const saveButton = document.querySelector('#save-button');
saveButton.addEventListener('click', storeSettings);
const saveButton = document.querySelector("#save-button");
saveButton.addEventListener("click", storeSettings);

View File

@@ -1,20 +1,20 @@
var android = false;
var gettingInfo = browser.runtime.getPlatformInfo();
gettingInfo.then(got => {
if (got.os == 'android') {
console.log('Running in Android detected');
gettingInfo.then((got) => {
if (got.os == "android") {
console.log("Running in Android detected");
android = true;
return true;
} else {
console.log('Running in Desktop detected');
console.log("Running in Desktop detected");
android = false;
return false;
}
});
function isDroid() {
console.log('android?', android);
console.log("android?", android);
if (android == undefined) {
return false;
}

View File

@@ -1,10 +1,10 @@
var titlepref = chrome.i18n.getMessage('titlePreface');
var titlepref = chrome.i18n.getMessage("titlePreface");
function onSet(result) {
if (result) {
console.log('->: Value was updated');
console.log("->: Value was updated");
} else {
console.log('-X: Value was not updated');
console.log("-X: Value was not updated");
}
}
@@ -12,10 +12,19 @@ function onSet(result) {
risky sites in your browser */
function disableHyperlinkAuditing() {
var setting = browser.privacy.websites.hyperlinkAuditingEnabled.set({
value: false
value: false,
});
console.log('Disabling hyperlink auditing/val=', {
value: false
console.log("Disabling hyperlink auditing/val=", {
value: false,
});
setting.then(onSet);
}
// UNINSTALL ONLY
function enableHyperlinkAuditing() {
var setting = browser.privacy.websites.hyperlinkAuditingEnabled.clear();
console.log("Disabling hyperlink auditing/val=", {
value: false,
});
setting.then(onSet);
}
@@ -23,10 +32,19 @@ function disableHyperlinkAuditing() {
// This enables first-party isolation
function enableFirstPartyIsolation() {
var setting = browser.privacy.websites.firstPartyIsolate.set({
value: true
value: true,
});
console.log('Enabling first party isolation/val=', {
value: true
console.log("Enabling first party isolation/val=", {
value: true,
});
setting.then(onSet);
}
// UNINSTALL ONLY
function disableFirstPartyIsolation() {
var setting = browser.privacy.websites.firstPartyIsolate.clear();
console.log("Enabling first party isolation/val=", {
value: true,
});
setting.then(onSet);
}
@@ -36,23 +54,27 @@ function enableFirstPartyIsolation() {
interface for now */
function disableEvilCookies() {
var getting = browser.privacy.websites.cookieConfig.get({});
getting.then(got => {
getting.then((got) => {
var setting = browser.privacy.websites.cookieConfig.set({
value: {
behavior: 'reject_third_party',
nonPersistentCookies: got.value.nonPersistentCookies
}
behavior: "reject_third_party",
nonPersistentCookies: got.value.nonPersistentCookies,
},
});
console.log('Setting cookie behavior/val=', {
console.log("Setting cookie behavior/val=", {
value: {
behavior: 'reject_third_party',
nonPersistentCookies: got.value.nonPersistentCookies
}
behavior: "reject_third_party",
nonPersistentCookies: got.value.nonPersistentCookies,
},
});
setting.then(onSet);
});
}
function enableEvilCookies() {
var getting = browser.privacy.websites.cookieConfig.clear();
}
// Make sure that they're gone
/*function disableBadCookies(){
var setting = browser.privacy.websites.thirdPartyCookiesAllowed.set({
@@ -67,10 +89,19 @@ function disableEvilCookies() {
// this disables the use of referrer headers
function disableReferrers() {
var setting = browser.privacy.websites.referrersEnabled.set({
value: false
value: false,
});
console.log("Disabling referrer headers/val=", {
value: false
value: false,
});
setting.then(onSet);
}
// UNINSATALL ONLY
function enableReferrers() {
var setting = browser.privacy.websites.referrersEnabled.clear();
console.log("Disabling referrer headers/val=", {
value: false,
});
setting.then(onSet);
}
@@ -78,10 +109,19 @@ function disableReferrers() {
// enable fingerprinting resistent features(letterboxing and stuff)
function enableResistFingerprinting() {
var setting = browser.privacy.websites.resistFingerprinting.set({
value: true
value: true,
});
console.log("Enabling resist fingerprinting/val=", {
value: true
value: true,
});
setting.then(onSet);
}
// UNINSTALL ONLY
function disableResistFingerprinting() {
var setting = browser.privacy.websites.resistFingerprinting.clear();
console.log("Enabling resist fingerprinting/val=", {
value: false,
});
setting.then(onSet);
}
@@ -89,10 +129,19 @@ function enableResistFingerprinting() {
// 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"
value: "always",
});
console.log("Enabling tracking protection/val=", {
value: "always"
value: "always",
});
setting.then(onSet);
}
// UNINSTALL ONLY
function disableTrackingProtection() {
var setting = browser.privacy.websites.trackingProtectionMode.clear();
console.log("Enabling tracking protection/val=", {
value: "always",
});
setting.then(onSet);
}
@@ -101,15 +150,15 @@ function enableTrackingProtection() {
management dependent on identifying information */
function disableDigitalRestrictionsManagement() {
var gettingInfo = browser.runtime.getPlatformInfo();
gettingInfo.then(got => {
gettingInfo.then((got) => {
if (got.os == "win") {
var setting = browser.privacy.websites.protectedContentEnabled.set({
value: false
value: false,
});
console.log(
"Setting Protected Content(Digital Restrictions Management) false/val=",
{
value: false
value: false,
}
);
setting.then(onSet);
@@ -117,6 +166,45 @@ function disableDigitalRestrictionsManagement() {
});
}
// UNINSTALL ONLY
function disableDigitalRestrictionsManagement() {
var gettingInfo = browser.runtime.getPlatformInfo();
gettingInfo.then((got) => {
if (got.os == "win") {
var setting = browser.privacy.websites.protectedContentEnabled.clear();
console.log(
"Setting Protected Content(Digital Restrictions Management) false/val=",
{
value: true,
}
);
setting.then(onSet);
}
});
}
function unsetAllPrivacy() {
enableHyperlinkAuditing();
disableFirstPartyIsolation();
enableEvilCookies();
enableReferrers();
disableTrackingProtection();
disableResistFingerprinting();
enableDigitalRestrictionsManagement();
UnsetPeerConnection();
EnableSavePasswords();
}
browser.management.onUninstalled.addListener((info) => {
function gotSelf(selfinfo) {
if (info.name == selfinfo.name) {
unsetAllPrivacy();
}
}
var gettingSelf = browser.management.getSelf();
gettingSelf.then(gotSelf);
});
function setAllPrivacy() {
disableHyperlinkAuditing();
enableFirstPartyIsolation();
@@ -134,13 +222,13 @@ function ResetPeerConnection() {
var webrtc = true;
console.log("No snowflake plugin found, pre-disabled WebRTC");
var rtc = browser.privacy.network.peerConnectionEnabled.set({
value: webrtc
value: webrtc,
});
rtc.then(AssurePeerConnection);
}
function snowflake(snowflake) {
console.log("snowflake plugin found, leaving WebRTC alone", snowflake);
EnablePeerConnection();
AssurePeerConnection();
}
var snowflakeInfo = browser.management.get(
"{b11bea1f-a888-4332-8d8a-cec2be7d24b9}" // string
@@ -148,25 +236,27 @@ function ResetPeerConnection() {
snowflakeInfo.then(snowflake, reset);
}
function EnablePeerConnection() {
var webrtc = true;
var rtc = browser.privacy.network.peerConnectionEnabled.set({
value: webrtc
});
rtc.then(AssurePeerConnection);
console.log("Enabled WebRTC");
}
function AssurePeerConnection() {
function assure(webrtc) {
browser.privacy.network.peerConnectionEnabled.set({
value: true
});
browser.privacy.network.networkPredictionEnabled.set({
value: false
value: true,
});
chrome.privacy.network.webRTCIPHandlingPolicy.set({
value: "disable_non_proxied_udp"
value: "disable_non_proxied_udp",
});
}
let rtc = browser.privacy.network.peerConnectionEnabled.get({});
rtc.then(assure);
}
// UNINSTALL ONLY
function UnsetPeerConnection() {
function assure(webrtc) {
browser.privacy.network.peerConnectionEnabled.set({
value: true,
});
chrome.privacy.network.webRTCIPHandlingPolicy.set({
value: "default",
});
}
let rtc = browser.privacy.network.peerConnectionEnabled.get({});
@@ -174,7 +264,7 @@ function AssurePeerConnection() {
}
var gettingInfo = browser.runtime.getPlatformInfo();
gettingInfo.then(got => {
gettingInfo.then((got) => {
if (got.os == "android") {
browser.tabs.onCreated.addListener(ResetPeerConnection);
} else {
@@ -185,15 +275,13 @@ gettingInfo.then(got => {
function ResetDisableSavePasswords() {
browser.privacy.services.passwordSavingEnabled.set({
value: false
value: false,
});
console.log("Re-disabled saved passwords");
}
function EnableSavePasswords() {
browser.privacy.services.passwordSavingEnabled.set({
value: true
});
browser.privacy.services.passwordSavingEnabled.clear();
console.log("Enabled saved passwords");
}
@@ -201,7 +289,7 @@ function EnableSavePasswords() {
var defaultSettings = {
since: "forever",
dataTypes: ["downloads", "passwords", "formData", "localStorage", "history"]
dataTypes: ["downloads", "passwords", "formData", "localStorage", "history"],
};
function onError(therror) {
@@ -217,7 +305,7 @@ function forgetBrowsingData(storedSettings) {
const times = {
hour: () => 1000 * 60 * 60,
day: () => 1000 * 60 * 60 * 24,
week: () => 1000 * 60 * 60 * 24 * 7
week: () => 1000 * 60 * 60 * 24 * 7,
};
const sinceMilliseconds = times[selectedSince].call();
@@ -241,7 +329,7 @@ function forgetBrowsingData(storedSettings) {
browser.notifications.create({
type: "basic",
title: "Removed browsing data",
message: `Removed ${dataTypesString}\n for I2P Browsing`
message: `Removed ${dataTypesString}\n for I2P Browsing`,
});
}
@@ -250,41 +338,41 @@ function forgetBrowsingData(storedSettings) {
for (let item of historyItems) {
if (i2pHost(item.url)) {
browser.history.deleteUrl({
url: item.url
url: item.url,
});
browser.browsingData.removeCache({});
console.log("cleared Cache");
browser.browsingData
.removePasswords({
hostnames: [i2pHostName(item.url)],
since
since,
})
.then(onContextGotLog);
console.log("cleared Passwords");
browser.browsingData
.removeDownloads({
hostnames: [i2pHostName(item.url)],
since
since,
})
.then(onContextGotLog);
console.log("cleared Downloads");
browser.browsingData
.removeFormData({
hostnames: [i2pHostName(item.url)],
since
since,
})
.then(onContextGotLog);
console.log("cleared Form Data");
browser.browsingData
.removeLocalStorage({
hostnames: [i2pHostName(item.url)],
since
since,
})
.then(onContextGotLog);
console.log("cleared Local Storage");
let contexts = browser.contextualIdentities.query({
name: titlepref
name: titlepref,
});
function deepCleanCookies(cookies) {
@@ -292,7 +380,7 @@ function forgetBrowsingData(storedSettings) {
var removing = browser.cookies.remove({
firstPartyDomain: cookie.firstPartyDomain,
name: cookie.name,
url: item.url
url: item.url,
});
removing.then(onContextGotLog, onError);
}
@@ -303,7 +391,7 @@ function forgetBrowsingData(storedSettings) {
for (let cookieStoreId of cookieStoreIds) {
var removing = browser.cookies.getAll({
firstPartyDomain: null,
storeId: cookieStoreId.cookieStoreId
storeId: cookieStoreId.cookieStoreId,
});
removing.then(deepCleanCookies, onError);
}
@@ -317,7 +405,7 @@ function forgetBrowsingData(storedSettings) {
var searching = browser.history.search({
text: "i2p",
startTime: 0
startTime: 0,
});
searching.then(deepCleanHistory);
@@ -328,7 +416,27 @@ function forgetBrowsingData(storedSettings) {
function i2pHostName(url) {
let hostname = "";
if (url.indexOf("://") > -1) {
console.log("(hosts)", url);
let u = new URL(url);
if (u.host.endsWith(".i2p")) {
hostname = u.host;
} else if (url.includes("=")) {
if (url.includes(".i2p")) {
lsit = url.split("=");
for (let item in lsit) {
var items = lsit[item].split(`\ % `); //"\%")
for (let p in items) {
if (items[p].includes(".i2p")) {
hostname = items[p].replace("3D", 1);
}
break;
}
if (hostname != "") {
break;
}
}
}
} else if (url.indexOf("://") > -1) {
hostname = url.split("/")[2];
} else {
hostname = url.split("/")[0];
@@ -338,6 +446,9 @@ function i2pHostName(url) {
function i2pHost(url) {
let hostname = i2pHostName(url);
if (hostname.endsWith(".i2p")) {
console.log("(hostname) i2p", hostname);
}
return hostname.endsWith(".i2p");
}
@@ -381,7 +492,7 @@ function message(recieved) {
console.log(recieved);
if (recieved.rtc === "enableWebRTC") {
console.log("enableWebRTC");
EnablePeerConnection();
AssurePeerConnection();
} else if (recieved.rtc === "disableWebRTC") {
console.log("disableWebRTC");
ResetPeerConnection();

355
proxy.js
View File

@@ -1,168 +1,234 @@
var titlepref = chrome.i18n.getMessage('titlePreface');
var webpref = chrome.i18n.getMessage('webPreface');
var routerpref = chrome.i18n.getMessage('routerPreface');
var routerprefpriv = chrome.i18n.getMessage('routerPrefacePrivate');
var titlepref = chrome.i18n.getMessage("titlePreface");
var webpref = chrome.i18n.getMessage("webPreface");
var routerpref = chrome.i18n.getMessage("routerPreface");
var mailpref = chrome.i18n.getMessage("mailPreface");
var torrentpref = chrome.i18n.getMessage("torrentPreface");
var tunnelpref = chrome.i18n.getMessage("i2ptunnelPreface");
var ircpref = chrome.i18n.getMessage("ircPreface");
var extensionpref = chrome.i18n.getMessage("extensionPreface");
var muwirepref = chrome.i18n.getMessage("muwirePreface");
var botepref = chrome.i18n.getMessage("botePreface");
var blogpref = chrome.i18n.getMessage("blogPreface");
var blogprefpriv = chrome.i18n.getMessage("blogPrefacePrivate");
browser.privacy.network.peerConnectionEnabled.set({
value: true
value: true,
});
chrome.privacy.network.networkPredictionEnabled.set({
value: false
value: false,
});
chrome.privacy.network.webRTCIPHandlingPolicy.set({
value: 'disable_non_proxied_udp'
value: "disable_non_proxied_udp",
});
console.log('Disabled unproxied UDP.');
console.log("Disabled unproxied UDP.");
function shouldProxyRequest(requestInfo) {
return requestInfo.parentFrameId != -1;
}
var handleContextProxyRequest = async function(requestDetails) {
try {
var handleProxyRequest = function(context) {
var handleContextProxyRequest = async function (requestDetails) {
function ircProxy() {
if (!requestDetails.url.includes("7669")) {
proxy = {
failoverTimeout: 0,
proxyDns: false
type: getScheme(),
host: getHost(),
port: getPort(),
};
if (context == 'firefox-default' || context == 'firefox-private') {
return proxy;
}
if (requestDetails.url.includes(":7669")) {
proxy = null;
return proxy;
}
}
function blogProxy() {
if (!requestDetails.url.includes("8084")) {
proxy = {
type: getScheme(),
host: getHost(),
port: getPort(),
};
return proxy;
}
if (requestDetails.url.includes(":8084")) {
proxy = null;
return proxy;
}
}
function btProxy() {
proxy = routerProxy();
if (requestDetails.url.includes(":7662")) {
proxy = null;
return proxy;
}
console.log("(bt proxy)", proxy);
return proxy;
}
function mainProxy() {
console.log("(proxy) mainproxy 0");
proxy = {
type: getScheme(),
host: getHost(),
port: getPort(),
};
let url = new URL(requestDetails.url);
if (
requestDetails.url.startsWith(
"http://" + getHost() + ":" + getConsolePort() + "/i2psnark/"
)
) {
//+url.host)) {
console.log("(proxy) mainproxy 2", url);
proxy = null;
}
return proxy;
}
function routerProxy() {
if (routerHost(requestDetails.url)) {
proxy = null;
return proxy;
} else if (!routerHost(requestDetails.url)) {
proxy = {
type: getScheme(),
host: getHost(),
port: getPort(),
};
return proxy;
}
}
try {
var handleProxyRequest = function (context) {
proxy = {
type: getScheme(),
host: getHost(),
port: getPort(),
};
if (context == "firefox-default" || context == "firefox-private") {
proxy = null;
return proxy;
}
if (context != undefined) {
if (context.name == titlepref) {
var tab = tabGet(requestDetails.tabId);
if (!requestDetails.url.includes('/i2psnark/')) {
console.log('URL', requestDetails.url);
proxy = {
type: getScheme(),
host: getHost(),
port: getPort()
};
}
/*console.log("(proxy)", context.name);
console.log("Using", proxy.type);
console.log("proxy ", proxy.host + ":" + proxy.port);*/
console.log("(proxy), context", context);
proxy = routerProxy();
if (context.name == ircpref) {
proxy = ircProxy();
return proxy;
} else if (context.name == blogpref) {
proxy = blogProxy();
return proxy;
} else if (context.name == titlepref) {
proxy = mainProxy();
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 = routerProxy();
return proxy;
} else if (context.name == torrentpref) {
proxy = btProxy();
return proxy;
} else if (context.name == mailpref) {
return proxy;
} else if (context.name == tunnelpref) {
return proxy;
} else if (context.name == muwirepref) {
return proxy;
} else if (context.name == botepref) {
return proxy;
}
} else {
if (!routerHost(requestDetails.url)) {
if (localHost(requestDetails.url)) {
if (requestDetails.url.includes(":7669")) {
proxy = null;
} else if (requestDetails.url.includes(":7662")) {
proxy = null;
} else {
console.log(
"(proxy) non-routerconsole localhost url, will not interfere",
requestDetails.url
);
}
}
}
if (i2pHost(requestDetails.url)) {
proxy = {
type: getScheme(),
host: getHost(),
port: getPort()
port: getPort(),
};
/*console.log("(proxy)", context.name);
console.log("Using", proxy.type);
console.log("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);
console.log('Using', proxy.type);
console.log('proxy ', proxy.host + ':' + proxy.port);
return proxy;
} else {
proxy = null;
}
}
if (!routerHost(requestDetails.url)) {
if (localHost(requestDetails.url)) {
console.log(
'(proxy) non-routerconsole localhost url, will not interfere',
requestDetails.url
);
/*proxy = {
type: "http",
host: "localhost",
port: "65535"
};*/
if (requestDetails.url.includes("rpc")) {
console.log("(proxy for rpc url)", rpc);
}
} else if (i2pHost(requestDetails.url)) {
proxy = {
type: getScheme(),
host: getHost(),
port: getPort()
};
//var tab = tabGet(requestDetails.tabId);
//tab.then(handleTabRequest,)
return proxy;
}
return proxy;
};
var contextGet = async function(tabInfo) {
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) {
console.error(error);
return 'firefox-default';
return "firefox-default";
}
};
var tabGet = async function(tabId) {
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);
console.log("(proxy)Tab error", error);
}
};
if (proxyHost(requestDetails.url)) {
proxy = {
type: getScheme(),
host: getHost(),
port: getPort()
port: getPort(),
};
return proxy;
}
if (requestDetails.originUrl == browser.runtime.getURL('security.html')) {
console.log(
'(proxy) extension security URL',
browser.runtime.getURL('security.html')
);
if (requestDetails.originUrl == browser.runtime.getURL("security.html")) {
proxy = {
type: getScheme(),
host: getHost(),
port: getPort()
port: getPort(),
};
return proxy;
}
if (
requestDetails.cookieStoreId == 'firefox-default' ||
requestDetails.cookieStoreId == 'firefox-private'
requestDetails.cookieStoreId == "firefox-default" ||
requestDetails.cookieStoreId == "firefox-private"
) {
return browser.proxy.settings.get({});
}
if (requestDetails.tabId > 0) {
if (requestDetails.url.includes("MuWire")) {
return;
}
if (proxyHost(requestDetails.url)) {
proxy = {
type: getScheme(),
host: getHost(),
port: getPort()
port: getPort(),
};
return proxy;
} else if (extensionHost(requestDetails.url)) {
return;
} else if (i2pHost(requestDetails.url)) {
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);
//console.log('(proxy)Returning I2P Proxy', proxy);
return proxy;
} else if (extensionHost(requestDetails)) {
return;
} else {
var tab = tabGet(requestDetails.tabId);
var context = tab.then(contextGet);
@@ -173,64 +239,72 @@ var handleContextProxyRequest = async function(requestDetails) {
/*proxy = {};
console.log("(proxy)Returning unset Proxy", proxy);
return proxy;*/
} else {
proxy = {
type: getScheme(),
host: getHost(),
port: getPort(),
};
console.log("(proxy for rpc url)", rpc);
return proxy;
}
} catch (error) {
console.log('(proxy)Not using I2P Proxy.', error);
console.log("(proxy)Not using I2P Proxy.", error);
}
}
};
function SetupSettings() {
console.log('Initialising Settings');
console.log("Initialising Settings");
function onSetupError() {
console.log('Settings initialization error');
console.log("Settings initialization error");
}
//
function checkSchemeStoredSettings(storedSettings) {
if (storedSettings.proxy_scheme == undefined)
storedSettings.proxy_scheme = 'http';
storedSettings.proxy_scheme = "http";
else proxy_scheme = storedSettings.proxy_scheme;
console.log('Initialising Proxy Scheme', storedSettings.proxy_scheme);
console.log("Initialising Proxy Scheme", storedSettings.proxy_scheme);
setupProxy();
}
var gettingSchemeStoredSettings = browser.storage.local.get('proxy_scheme');
var gettingSchemeStoredSettings = browser.storage.local.get("proxy_scheme");
gettingSchemeStoredSettings.then(checkSchemeStoredSettings, onSetupError);
//
function checkHostStoredSettings(storedSettings) {
if (storedSettings.proxy_host == undefined)
storedSettings.proxy_host = '127.0.0.1';
storedSettings.proxy_host = "127.0.0.1";
else proxy_host = storedSettings.proxy_host;
console.log('Initialising Host', storedSettings.proxy_host);
console.log("Initialising Host", storedSettings.proxy_host);
setupProxy();
}
var gettingHostStoredSettings = browser.storage.local.get('proxy_host');
var gettingHostStoredSettings = browser.storage.local.get("proxy_host");
gettingHostStoredSettings.then(checkHostStoredSettings, onSetupError);
//
function checkPortStoredSettings(storedSettings) {
if (storedSettings.proxy_port == undefined)
storedSettings.proxy_port = '4444';
storedSettings.proxy_port = "4444";
else proxy_port = storedSettings.proxy_port;
console.log('Initialising Port', storedSettings.proxy_port);
console.log("Initialising Port", storedSettings.proxy_port);
setupProxy();
}
var gettingPortStoredSettings = browser.storage.local.get('proxy_port');
var gettingPortStoredSettings = browser.storage.local.get("proxy_port");
gettingPortStoredSettings.then(checkPortStoredSettings, onSetupError);
//
function checkControlHostStoredSettings(storedSettings) {
if (storedSettings.control_host == undefined)
storedSettings.control_host = '127.0.0.1';
storedSettings.control_host = "127.0.0.1";
else control_host = storedSettings.control_host;
console.log('Initialising Control Host', storedSettings.control_host);
console.log("Initialising Control Host", storedSettings.control_host);
setupProxy();
}
var gettingControlHostStoredSettings = browser.storage.local.get(
'control_host'
"control_host"
);
gettingControlHostStoredSettings.then(
checkControlHostStoredSettings,
@@ -240,14 +314,14 @@ function SetupSettings() {
//
function checkControlPortStoredSettings(storedSettings) {
if (storedSettings.control_port == undefined)
storedSettings.control_port = '7657';
storedSettings.control_port = "7657";
else control_port = storedSettings.control_port;
console.log('Initialising Control Port', storedSettings.control_port);
console.log("Initialising Control Port", storedSettings.control_port);
setupProxy();
}
var gettingControlPortStoredSettings = browser.storage.local.get(
'control_port'
"control_port"
);
gettingControlPortStoredSettings.then(
checkControlPortStoredSettings,
@@ -261,28 +335,28 @@ function SetupSettings() {
else disable_history = storedSettings.disable_history;
console.log(
'Initialising Disabled History',
"Initialising Disabled History",
storedSettings.disable_history
);
setupProxy();
}
var gettingHistoryStoredSettings = browser.storage.local.get(
'disable_history'
"disable_history"
);
gettingHistoryStoredSettings.then(checkHistoryStoredSettings, onSetupError);
}
function getScheme() {
if (proxy_scheme == 'HTTP') return 'http';
if (proxy_scheme == 'SOCKS') return 'socks';
if (proxy_scheme == 'http') return 'http';
if (proxy_scheme == 'socks') return 'socks';
else return 'http';
if (proxy_scheme == "HTTP") return "http";
if (proxy_scheme == "SOCKS") return "socks";
if (proxy_scheme == "http") return "http";
if (proxy_scheme == "socks") return "socks";
else return "http";
}
function getHost() {
if (proxy_host == undefined) {
proxy_host = '127.0.0.1';
proxy_host = "127.0.0.1";
}
return proxy_host;
}
@@ -290,41 +364,44 @@ function getHost() {
function getPort() {
if (proxy_port == undefined) {
var scheme = getScheme();
if (scheme == 'socks') proxy_port = '4446';
else proxy_port = '4444';
if (scheme == "socks") proxy_port = "4446";
else proxy_port = "4444";
}
return proxy_port;
}
function getConsolePort() {
if (control_port == undefined) {
var scheme = getScheme();
if (scheme == "socks") proxy_port = "7657";
else control_port = "7657";
}
return control_port;
}
function setupProxy() {
console.log('Setting up Firefox WebExtension proxy');
console.log("Setting up Firefox WebExtension proxy");
browser.proxy.onRequest.addListener(handleContextProxyRequest, {
urls: ['<all_urls>']
urls: ["<all_urls>"],
});
console.log('i2p settings created for WebExtension Proxy');
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);
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');
chrome.storage.local.get(function() {
console.log("updating settings from storage");
chrome.storage.local.get(function () {
SetupSettings();
update();
setupProxy();
});
var gettingInfo = browser.runtime.getPlatformInfo();
gettingInfo.then(got => {
if (got.os != 'android') {
browser.windows.getAll().then(wins => wins.forEach(themeWindow));
}
});
}
updateFromStorage();
@@ -333,9 +410,9 @@ SetupSettings();
setupProxy();
var gettingListenerInfo = browser.runtime.getPlatformInfo();
gettingListenerInfo.then(got => {
gettingListenerInfo.then((got) => {
browser.windows.onCreated.addListener(() => {
chrome.storage.local.get(function() {
chrome.storage.local.get(function () {
setupProxy();
});
});

View File

@@ -4,195 +4,200 @@
<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>2020-06-23T03:21:35Z</updated>
<updated>2021-05-26T22:32:58Z</updated>
<entry>
<id>tag:github.com,2008:Repository/169256012/0.77</id>
<updated>2020-09-25T00:19:45Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/0.77"/>
<title>0.77</title>
<enclosure url="magnet:?xt=urn:btih:5f45673bc107ec42a8b4d02aa4d5d7487949fc66" type="application/x-bittorrent" />
<content type="html">&lt;p&gt;Merge pull request &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/pull/100&quot;&gt;#100&lt;/a&gt; from eyedeekay/bookmarks&lt;/p&gt;
&lt;p&gt;make the bookmarks part of a subdirectory&lt;/p&gt;</content>
<id>tag:github.com,2008:Repository/169256012/0.105</id>
<updated>2021-05-27T20:19:35Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/0.105"/>
<title>0.105</title>
<enclosure url="magnet:?xl=2485<title>0.105</title>dn=i2ppb%40eyedeekay.github.io.xpi.torrent<title>0.105</title>xt=urn:tree:tiger:w6kewvpw25bnau2rwkczbnryrjdzn54ietse3zi<title>0.105</title>xt=urn:ed2k:1cd9743fb664404298b7f2ad7ee45db0<title>0.105</title>xt=urn:aich:4vhcsp6t3c2mkjzds2etixyinyj7xtkp" type="application/x-bittorrent" />
<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 (0.105-1) UNRELEASED; urgency=low&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add help page for configuring i2pcontrol&lt;/li&gt;
&lt;li&gt;Add help page for configuring i2psnark-rpc&lt;/li&gt;
&lt;li&gt;Update the icons&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; Wed, 26 May 2021 12:56:56 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (0.103-1) UNRELEASED; urgency=low&lt;/p&gt;</content>
<author>
<name>eyedeekay</name>
</author>
<media:thumbnail height="30" width="30" url="https://avatars3.githubusercontent.com/u/8733713?s=60&amp;v=4"/>
<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.75</id>
<updated>2020-06-23T03:22:59Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/0.75"/>
<title>0.75</title>
<id>tag:github.com,2008:Repository/169256012/0.103</id>
<updated>2021-05-26T16:59:28Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/0.103"/>
<title>0.103</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.75-1) UNRELEASED; urgency=low&lt;/p&gt;
i2psetproxy.js (0.103-1) UNRELEASED; urgency=low&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Update bookmarks format&lt;/li&gt;
&lt;li&gt;Deprecate WebRTC State Management&lt;/li&gt;
&lt;li&gt;Fix for double-test issue on /home.html page in the extension&lt;/li&gt;
&lt;li&gt;Fix for broken options menu&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, 22 JUN 2020 11:22:37 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (0.73-1) UNRELEASED; urgency=low&lt;/p&gt;</content>
&lt;p&gt;-- idk &lt;a href=&quot;mailto:hankhill19580@gmail.com&quot;&gt;hankhill19580@gmail.com&lt;/a&gt; Wed, 26 May 2021 12:56:56 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (0.101-1) UNRELEASED; urgency=low&lt;/p&gt;</content>
<author>
<name>eyedeekay</name>
</author>
<media:thumbnail height="30" width="30" url="https://avatars3.githubusercontent.com/u/8733713?s=60&amp;v=4"/>
<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.73</id>
<updated>2020-03-24T23:49:45Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/0.73"/>
<title>0.73</title>
<id>tag:github.com,2008:Repository/169256012/0.101</id>
<updated>2021-05-24T19:42:29Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/0.101"/>
<title>0.101</title>
<content type="html">&lt;p&gt;-- idk &lt;a href=&quot;mailto:hankhill19580@gmail.com&quot;&gt;hankhill19580@gmail.com&lt;/a&gt; Mon, 24 May 2021 3:41:35 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (0.99-1) UNRELEASED; urgency=low&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sweeping changes to styles&lt;/li&gt;
&lt;li&gt;fix for issue when using noscript and visiting susimail&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, 24 May 2021 2:05:21 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (0.97-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.99</id>
<updated>2021-05-24T18:08:37Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/0.99"/>
<title>0.99</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.73-1) UNRELEASED; urgency=low&lt;/p&gt;
i2psetproxy.js (0.99-1) UNRELEASED; urgency=low&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fix incomplete bugfix from 0.69 again&lt;/li&gt;
&lt;li&gt;Sweeping changes to styles&lt;/li&gt;
&lt;li&gt;fix for issue when using noscript and visiting susimail&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; Tue, 24 MAR 2020 19:48:14 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (0.71-1) UNRELEASED; urgency=low&lt;/p&gt;</content>
&lt;p&gt;-- idk &lt;a href=&quot;mailto:hankhill19580@gmail.com&quot;&gt;hankhill19580@gmail.com&lt;/a&gt; Mon, 24 May 2021 2:05:21 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (0.97-1) UNRELEASED; urgency=low&lt;/p&gt;</content>
<author>
<name>eyedeekay</name>
</author>
<media:thumbnail height="30" width="30" url="https://avatars3.githubusercontent.com/u/8733713?s=60&amp;v=4"/>
<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.71</id>
<updated>2020-03-24T23:01:20Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/0.71"/>
<title>0.71</title>
<content type="html">&lt;h1&gt;I2P in Private Browsing Mode&lt;/h1&gt;
<id>tag:github.com,2008:Repository/169256012/0.97</id>
<updated>2021-02-05T18:05:51Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/0.97"/>
<title>0.97</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.97-1) UNRELEASED; urgency=low&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fix theme issue, add x-i2p-torrentlocation HEADER support&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; FRI, 5 FEB 2021 1:02:55 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (0.95-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.95</id>
<updated>2020-12-21T23:21:35Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/0.95"/>
<title>0.95</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.95-1) UNRELEASED; urgency=low&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fix github &lt;a class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;763036769&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/issues/102&quot; data-hovercard-type=&quot;issue&quot; data-hovercard-url=&quot;/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/issues/102/hovercard&quot; href=&quot;https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/issues/102&quot;&gt;#102&lt;/a&gt; and &lt;a class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;763043125&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/issues/103&quot; data-hovercard-type=&quot;issue&quot; data-hovercard-url=&quot;/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/issues/103/hovercard&quot; href=&quot;https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/issues/103&quot;&gt;#103&lt;/a&gt;&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; Sat, 21 DEC 2020 6:15:05 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (0.93-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.93</id>
<updated>2020-12-14T22:20:08Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/0.93"/>
<title>0.93</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.93-1) UNRELEASED; urgency=low&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Emergency fix of the first one&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; Sat, 14 DEC 2020 5:18:53 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (0.91-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.91</id>
<updated>2020-12-14T19:47:59Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/0.91"/>
<title>0.91</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.91-1) UNRELEASED; urgency=low&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Exclude clearnet code hosting sites from scrub checks&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; Sat, 14 DEC 2020 2:46:23 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (0.89-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.89</id>
<updated>2020-12-13T19:11:13Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/0.89"/>
<title>0.89</title>
<content type="html">&lt;p&gt;============================&lt;/p&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 (0.71-1) UNRELEASED; urgency=low&lt;/p&gt;
i2psetproxy.js (0.89-1) UNRELEASED; urgency=low&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fix incomplete bugfix from 0.69&lt;/li&gt;
&lt;li&gt;Pages with lots of AJAX requests could trigger a performance degradation&lt;/li&gt;
&lt;li&gt;Improve performance of x-i2p-* headers and meta tags&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; Tue, 24 MAR 2020 0:19:59 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (0.69-1) UNRELEASED; urgency=low&lt;/p&gt;</content>
&lt;p&gt;i2psetproxy.js (0.87-1) UNRELEASED; urgency=low&lt;/p&gt;</content>
<author>
<name>eyedeekay</name>
</author>
<media:thumbnail height="30" width="30" url="https://avatars3.githubusercontent.com/u/8733713?s=60&amp;v=4"/>
<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.69</id>
<updated>2020-03-24T04:19:44Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/0.69"/>
<title>0.69</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.69-1) UNRELEASED; urgency=low&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add MuWire contextual ID&lt;/li&gt;
&lt;li&gt;Fix bug occurring on certain modded I2P installs&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; Tue, 24 MAR 2020 0:12:02 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (0.67-1) UNRELEASED; urgency=low&lt;/p&gt;</content>
<author>
<name>eyedeekay</name>
</author>
<media:thumbnail height="30" width="30" url="https://avatars3.githubusercontent.com/u/8733713?s=60&amp;v=4"/>
</entry>
<entry>
<id>tag:github.com,2008:Repository/169256012/0.67</id>
<updated>2020-03-18T04:27:30Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/0.67"/>
<title>0.67</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.67-1) UNRELEASED; urgency=low&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tweak some default settings that should have gone into 65&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; Tue, 17 MAR 2020 22:58:55 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (0.65-1) UNRELEASED; urgency=low&lt;/p&gt;</content>
<author>
<name>eyedeekay</name>
</author>
<media:thumbnail height="30" width="30" url="https://avatars3.githubusercontent.com/u/8733713?s=60&amp;v=4"/>
</entry>
<entry>
<id>tag:github.com,2008:Repository/169256012/0.65</id>
<updated>2020-03-18T03:01:20Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/0.65"/>
<title>0.65</title>
<id>tag:github.com,2008:Repository/169256012/0.87</id>
<updated>2020-12-06T18:37:57Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/0.87"/>
<title>0.87</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 (0.65-1) UNRELEASED; urgency=low&lt;/p&gt;
i2psetproxy.js (0.87-1) UNRELEASED; urgency=low&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Initial prototype of certs implementation&lt;/li&gt;
&lt;li&gt;Use &quot;pinned apptabs&quot; to minimize the number of tabs occupied by an app&lt;/li&gt;
&lt;li&gt;Get ready for self-hosted updates but with bittorrent because it&#39;s cooler&lt;/li&gt;
&lt;li&gt;Disable searching for i2p sites in non-i2p search engines&lt;/li&gt;
&lt;li&gt;Add contexts for i2pbote and Dispatch&lt;/li&gt;
&lt;li&gt;Remain in tighter control of x-i2p-torrentlocation priority&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; Tue, 17 MAR 2020 22:58:55 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (0.63-1) UNRELEASED; urgency=low&lt;/p&gt;</content>
&lt;p&gt;-- idk &lt;a href=&quot;mailto:hankhill19580@gmail.com&quot;&gt;hankhill19580@gmail.com&lt;/a&gt; Sat, 10 NOV 2020 1:33:50 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (0.85-1) UNRELEASED; urgency=low&lt;/p&gt;</content>
<author>
<name>eyedeekay</name>
</author>
<media:thumbnail height="30" width="30" url="https://avatars3.githubusercontent.com/u/8733713?s=60&amp;v=4"/>
</entry>
<entry>
<id>tag:github.com,2008:Repository/169256012/0.63</id>
<updated>2020-03-02T23:01:58Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/0.63"/>
<title>0.63</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.63-1) UNRELEASED; urgency=low&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;other containerizers bugfix&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, 02 MAR 2020 17:54:26 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (0.61-1) UNRELEASED; urgency=low&lt;/p&gt;</content>
<author>
<name>eyedeekay</name>
</author>
<media:thumbnail height="30" width="30" url="https://avatars3.githubusercontent.com/u/8733713?s=60&amp;v=4"/>
</entry>
<entry>
<id>tag:github.com,2008:Repository/169256012/0.61</id>
<updated>2020-03-02T22:48:06Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/0.61"/>
<title>0.61</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.61-1) UNRELEASED; urgency=low&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;other containerizers bugfix&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, 02 MAR 2020 17:46:24 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (0.59-1) UNRELEASED; urgency=low&lt;/p&gt;</content>
<author>
<name>eyedeekay</name>
</author>
<media:thumbnail height="30" width="30" url="https://avatars3.githubusercontent.com/u/8733713?s=60&amp;v=4"/>
</entry>
<entry>
<id>tag:github.com,2008:Repository/169256012/0.59</id>
<updated>2020-02-26T03:10:23Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/0.59"/>
<title>0.59</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.59-1) UNRELEASED; urgency=low&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;transmission-rpc based torrent controls&lt;/li&gt;
&lt;li&gt;bugfixes&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; Tue, 25 FEB 2020 20:52:19 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (0.57-1) UNRELEASED; urgency=low&lt;/p&gt;</content>
<author>
<name>eyedeekay</name>
</author>
<media:thumbnail height="30" width="30" url="https://avatars3.githubusercontent.com/u/8733713?s=60&amp;v=4"/>
<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

302
script.js
View File

@@ -1,161 +1,151 @@
browser.runtime.onMessage.addListener(request => {
var response = '';
if (request.req === 'i2p-location') {
response = 'no-alt-location';
const metas = document.getElementsByTagName('meta');
for (let i = 0; i < metas.length; i++) {
try {
tag = metas[i].getAttribute('http-equiv');
if (tag.toUpperCase() === 'I2P-LOCATION') {
response = metas[i].getAttribute('content');
}
if (tag.toUpperCase() === 'X-I2P-LOCATION') {
response = metas[i].getAttribute('content');
}
}catch{
};
browser.runtime.onMessage.addListener((request) => {
var response = "no-alt-location";
console.log(request);
if (request.req === "i2p-location") {
var tag = document.querySelector('meta[http-equiv="i2p-location"]');
if (tag != undefined) {
console.log(tag);
if (tag) response = tag.content;
}
var tag = document.querySelector('meta[http-equiv="x-i2p-location"]');
if (tag != undefined) {
console.log(tag);
if (tag) response = tag.content;
}
}
if (request.req === 'i2p-torrentlocation') {
response = 'no-alt-location';
const metas = document.getElementsByTagName('meta');
for (let i = 0; i < metas.length; i++) {
try {
tag = metas[i].getAttribute('http-equiv');
if (tag.toUpperCase() === 'I2P-TORRENTLOCATION') {
response = metas[i].getAttribute('content');
var imgs = document.getElementsByTagName('img');
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 links = document.getElementsByTagName('a');
console.log('Listing link', links);
for (let link of links) {
console.log('(Changing Link)', link);
let tmpsrc = new URL(link.href);
// console.log("link", tmpsrc.host, tmpsrc.pathname)
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('.')) {
console.log('link', tmpsrc.host, tmpsrc.pathname);
link.href = 'http://127.0.0.1:7657/i2psnark/' + tmpsrc.host + tmpsrc.pathname;
link.onerror = function() {
window.location.href = tmpsrc.href;
};
}
//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.includes('.') && !tmpsrc..pathname.endsWith('/')) {
//console.log('http://127.0.0.1:7657/i2psnark/' + tmpsrc.host + tmpsrc.pathname;)
//link.href = 'http://127.0.0.1:7657/i2psnark/' + tmpsrc.host + tmpsrc.pathname;
//link.onerror = function() {
//link.src = tmpsrc;
//};
//}
}
}
var videos = document.getElementsByTagName('video');
for (let video of videos) {
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 + '/');
video.innerHTML = topInnerHTML + innerHTML;
}
}
}
var audios = document.getElementsByTagName('audio');
for (let audio of audios) {
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 + '/');
audio.innerHTML = topInnerHTML + innerHTML;
}
}
}
}
if (tag.toUpperCase() === 'X-I2P-TORRENTLOCATION') {
response = metas[i].getAttribute('content');
var imgs = document.getElementsByTagName('img');
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 links = document.getElementsByTagName('a');
console.log('Listing link', links);
for (let link of links) {
console.log('(Changing Link)', link);
let tmpsrc = new URL(link.href);
//console.log("link", tmpsrc.host, tmpsrc.pathname)
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('.')) {
console.log('link', tmpsrc.host, tmpsrc.pathname);
link.href = 'http://127.0.0.1:7657/i2psnark/' + tmpsrc.host + tmpsrc.pathname;
link.onerror = function() {
window.location.href = tmpsrc.href;
};
}
//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.includes('.') && !tmpsrc..pathname.endsWith('/')) {
//console.log('http://127.0.0.1:7657/i2psnark/' + tmpsrc.host + tmpsrc.pathname;)
//link.href = 'http://127.0.0.1:7657/i2psnark/' + tmpsrc.host + tmpsrc.pathname;
//link.onerror = function() {
//link.src = tmpsrc;
//};
//}
}
}
var videos = document.getElementsByTagName('video');
for (let video of videos) {
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 + '/');
video.innerHTML = topInnerHTML + innerHTML;
}
}
}
var audios = document.getElementsByTagName('audio');
for (let audio of audios) {
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 + '/');
audio.innerHTML = topInnerHTML + innerHTML;
}
}
}
}
}catch{
};
if (request.req === "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);
}
}
return Promise.resolve({content: response});
return Promise.resolve({ content: response });
});
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;
}

1035
scrub.js

File diff suppressed because it is too large Load Diff

70
sectorrent.html Normal file
View File

@@ -0,0 +1,70 @@
<!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">
<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>

View File

@@ -3,8 +3,7 @@
<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">-->
<link href="home.css" rel="stylesheet"><!--<link href="info.css" rel="stylesheet">--><!--<link href="torrent/popup.css" rel="stylesheet">-->
<title>
</title>

View File

@@ -14,4 +14,10 @@ button {
}
.button-list {
display: inline
}
#hidden {
display: none
}
.hidden {
display: none
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 133 KiB

View File

@@ -4,7 +4,7 @@
<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">-->
<!--<link href="info.css" rel="stylesheet">--><!--<link href="torrent/popup.css" rel="stylesheet">-->
<title>
</title>

View File

@@ -1,15 +1,14 @@
function gotCurrent(tab) {
function gotTitle(title) {
let addr = title;
document.getElementById('TypeInfo').innerHTML = '<div class=\"AddressInfo\"><a href=\"' + addr + '\">' + addr + '</a></div>';
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
tabId: tab[0].id,
});
gettingTitle.then(gotTitle);
}
function tabError(error) {

View File

@@ -1,4 +1,4 @@
Acknowledgement
Acknowledgementindex
===============
**Many, many thanks to the [Transmitter](https://github.com/myfreeweb/transmitter)
@@ -33,7 +33,7 @@ To install the plugin, go to [http://127.0.0.1:7657/configplugins](http://127.0.
and scroll down to the section of the page where it says "Installation from URL"
and paste the following URL:
```http://stats.i2p/i2p/plugins/i2psnark-rpc.su3```
`http://stats.i2p/i2p/plugins/i2psnark-rpc.su3`
Click the "Install Plugin" button and you'll be ready to go. Now, open the
extension options menu, and just click "Save." The defaults are correct for use

View File

@@ -1,18 +1,18 @@
'use strict';
"use strict";
////// Session extraction
function setupExtractor() {
browser.webRequest.onHeadersReceived.removeListener(extractSession);
browser.storage.local.get('server').then(({ server }) => {
browser.storage.local.get("server").then(({ server }) => {
if (!server) {
return;
}
console.log('Session extractor setup for', server.base_url);
console.log("Session extractor setup for", server.base_url);
browser.webRequest.onBeforeSendHeaders.addListener(
extractSession,
{ urls: [server.base_url + '*'] },
['requestHeaders']
{ urls: [server.base_url + "*"] },
["requestHeaders"]
);
});
}
@@ -21,7 +21,7 @@ setupExtractor();
function extractSession(requestDetails) {
const hdr = requestDetails.requestHeaders.filter(
x => x.name.toLowerCase() === "x-transmission-session-id"
(x) => x.name.toLowerCase() === "x-transmission-session-id"
)[0];
if (!hdr) {
return;
@@ -58,21 +58,21 @@ function addUrl(torrentUrl, downloadDir) {
console.log("Downloading torrent", torrentUrl);
p = fetch(torrentUrl, {
method: "GET",
credentials: "include"
credentials: "include",
})
.then(resp => {
.then((resp) => {
if (resp.ok) {
return resp.blob();
}
throw new Error("Could not download torrent");
})
.then(blobToBase64)
.then(b64 => {
.then((b64) => {
params.metainfo = b64;
return rpcCall("torrent-add", params);
});
}
return p.then(x => {
return p.then((x) => {
updateBadge();
return x;
});
@@ -85,7 +85,7 @@ function handleUrl(requestDetails) {
decodeURIComponent(
requestDetails.url.replace("http://transmitter.web-extension/", "")
)
).then(x => {
).then((x) => {
return browser.storage.local.get("server").then(({ server }) => {
return { redirectUrl: server.base_url + "web/" };
});
@@ -107,19 +107,19 @@ function createContextMenu() {
browser.contextMenus.create({
id: "transmitter-add",
title: "Download with Transmission remote",
contexts: ["link"]
contexts: ["link"],
});
} else {
browser.contextMenus.create({
id: "transmitter-add",
title: "Download to Default location",
contexts: ["link"]
contexts: ["link"],
});
server.locations.forEach(location => {
server.locations.forEach((location) => {
browser.contextMenus.create({
id: "transmitter-add-loc-" + location.index,
title: "Download to " + location.name,
contexts: ["link"]
contexts: ["link"],
});
});
}
@@ -152,42 +152,42 @@ function updateBadge() {
) {
return;
}
return rpcCall("session-stats", {}).then(response => {
return rpcCall("session-stats", {}).then((response) => {
const args = response.arguments; // lol the name 'arguments' means destructuring in strict mode is impossible
switch (server.badge) {
case "num":
browser.browserAction.setBadgeBackgroundColor({ color: "gray" });
browser.browserAction.setBadgeText({
text: "" + args.activeTorrentCount
text: "" + args.activeTorrentCount,
});
break;
case "dl":
browser.browserAction.setBadgeBackgroundColor({ color: "green" });
browser.browserAction.setBadgeText({
text: formatSpeed(args.downloadSpeed)
text: formatSpeed(args.downloadSpeed),
});
break;
case "ul":
browser.browserAction.setBadgeBackgroundColor({ color: "blue" });
browser.browserAction.setBadgeText({
text: formatSpeed(args.uploadSpeed)
text: formatSpeed(args.uploadSpeed),
});
break;
case "auto":
if (args.downloadSpeed > 0) {
browser.browserAction.setBadgeBackgroundColor({ color: "green" });
browser.browserAction.setBadgeText({
text: formatSpeed(args.downloadSpeed)
text: formatSpeed(args.downloadSpeed),
});
} else if (args.uploadSpeed > 0) {
browser.browserAction.setBadgeBackgroundColor({ color: "blue" });
browser.browserAction.setBadgeText({
text: formatSpeed(args.uploadSpeed)
text: formatSpeed(args.uploadSpeed),
});
} else {
browser.browserAction.setBadgeBackgroundColor({ color: "gray" });
browser.browserAction.setBadgeText({
text: "" + args.activeTorrentCount
text: "" + args.activeTorrentCount,
});
}
break;
@@ -196,20 +196,20 @@ function updateBadge() {
});
}
browser.alarms.onAlarm.addListener(alarm => {
browser.alarms.onAlarm.addListener((alarm) => {
if (alarm.name === "transmitter-badge-update") {
return updateBadge();
}
});
function setupBadge() {
browser.alarms.clear("transmitter-badge-update").then(x => {
browser.alarms.clear("transmitter-badge-update").then((x) => {
browser.storage.local.get("server").then(({ server }) => {
if (!server) {
return;
}
browser.alarms.create("transmitter-badge-update", {
periodInMinutes: parseInt(server.badge_interval || "1")
periodInMinutes: parseInt(server.badge_interval || "1"),
});
updateBadge();
});

View File

@@ -1,30 +1,30 @@
'use strict';
"use strict";
////// RPC
function rpcCall(meth, args) {
return browser.storage.local.get(function(server) {
return browser.storage.local.get(function (server) {
const myHeaders = {
'Content-Type': 'application/json',
'x-transmission-session-id': server.session
"Content-Type": "application/json",
"x-transmission-session-id": server.session,
};
//console.log("(torrent)", server.session)
if (server.username !== '' || server.btrpcpass !== '') {
myHeaders['Authorization'] =
'Basic ' +
btoa((server.username || '') + ':' + (server.btrpcpass || ''));
if (server.username !== "" || server.btrpcpass !== "") {
myHeaders["Authorization"] =
"Basic " +
btoa((server.username || "") + ":" + (server.btrpcpass || ""));
}
//console.log("(torrent) rpc", server.base_url);
return fetch(server.base_url + 'rpc', {
method: 'POST',
return fetch(server.base_url + "rpc", {
method: "POST",
headers: myHeaders,
body: JSON.stringify({ method: meth, arguments: args }),
credentials: 'include' // allows HTTPS client certs!
credentials: "include", // allows HTTPS client certs!
})
.then(function(response) {
const session = response.headers.get('x-transmission-session-id');
.then(function (response) {
const session = response.headers.get("x-transmission-session-id");
if (session) {
browser.storage.local.get({}).then(function(storage) {
browser.storage.local.get({}).then(function (storage) {
storage.session = session;
browser.storage.local.set(storage);
});
@@ -39,7 +39,7 @@ function rpcCall(meth, args) {
error.response = response;
throw error;
})
.then(function(response) {
.then(function (response) {
return response.json();
});
});
@@ -50,11 +50,11 @@ function rpcCall(meth, args) {
function formatSpeed(s) {
// Firefox shows 4 characters max
if (s < 1000 * 1000) {
return (s / 1000).toFixed() + 'K';
return (s / 1000).toFixed() + "K";
}
if (s < 1000 * 1000 * 1000) {
return (s / 1000 / 1000).toFixed() + 'M';
return (s / 1000 / 1000).toFixed() + "M";
}
// You probably don't have that download speed…
return (s / 1000 / 1000 / 1000).toFixed() + 'T';
return (s / 1000 / 1000 / 1000).toFixed() + "T";
}

View File

@@ -6,7 +6,7 @@
<link rel="stylesheet" type="text/css" href="../sidebar.css" />
</head>
<body>
<h1>Acknowledgement</h1>
<h1>Acknowledgementindex</h1>
<p><strong>Many, many thanks to the <a href="https://github.com/myfreeweb/transmitter">Transmitter</a>
webextension.</strong></p>

View File

@@ -1,22 +1,27 @@
'use strict';
"use strict";
var TrpcCall = async function(meth, args) {
var TrpcCall = async function (meth, args) {
const server = await browser.storage.local.get(null);
const myHeaders = {
'Content-Type': 'application/json',
'x-transmission-session-id': server.session
"Content-Type": "application/json",
"x-transmission-session-id": server.session,
};
console.log('(torrent) session', server.session);
if (server.username !== '' || server.btrpcpass !== '') {
myHeaders['Authorization'] =
'Basic ' + btoa((server.username || '') + ':' + (server.btrpcpass || ''));
console.log("(torrent) session", server.session);
if (server.username !== "" || server.bt_rpc_pass !== "") {
myHeaders["Authorization"] =
"Basic " +
btoa((server.username || "") + ":" + (server.bt_rpc_pass || ""));
}
console.log('(torrent) rpcurl', server.base_url + 'rpc');
return fetch(server.base_url + 'rpc', {
method: 'POST',
let req_url = "http://" + server.bt_rpc_host;
if (server.bt_rpc_port != 0) req_url += ":" + server.bt_rpc_port;
req_url += "/" + server.bt_rpc_path;
console.log("(torrent) rpcurl", req_url);
return fetch(req_url + "rpc", {
method: "POST",
headers: myHeaders,
body: JSON.stringify({ method: meth, arguments: args }),
credentials: 'include' // allows HTTPS client certs!
credentials: "include", // allows HTTPS client certs!
});
/*.then(function(response) {
@@ -32,13 +37,13 @@ var TrpcCall = async function(meth, args) {
error.response = response;
throw error;
});*/
}
};
const torrentsPane = document.getElementById('torrents-pane');
const configPane = document.getElementById('config-pane');
const torrentsPane = document.getElementById("torrents-pane");
const configPane = document.getElementById("config-pane");
for (const opener of document.querySelectorAll('.config-opener')) {
opener.addEventListener('click', e => {
for (const opener of document.querySelectorAll(".config-opener")) {
opener.addEventListener("click", (e) => {
browser.runtime.openOptionsPage();
});
}
@@ -53,7 +58,13 @@ const torrentsList = document.getElementById("torrents-list");
const torrentsTpl = document.getElementById("torrents-tpl");
const torrentsError = document.getElementById("torrents-error");
const getArgs = {
fields: ["name", "percentDone", "rateDownload", "rateUpload", "queuePosition"]
fields: [
"name",
"percentDone",
"rateDownload",
"rateUpload",
"queuePosition",
],
};
let cachedTorrents = [];
@@ -90,7 +101,7 @@ function searchTorrents() {
let newTorrents = cachedTorrents;
const val = torrentsSearch.value.toLowerCase().trim();
if (val.length > 0) {
newTorrents = newTorrents.filter(x => x.name.toLowerCase().includes(val));
newTorrents = newTorrents.filter((x) => x.name.toLowerCase().includes(val));
}
renderTorrents(newTorrents);
}
@@ -99,16 +110,16 @@ torrentsSearch.addEventListener("keyup", searchTorrents);
function refreshTorrents(server) {
console.log("(torrent) initiating", server);
return TrpcCall("torrent-get", getArgs).then(function(response) {
return TrpcCall("torrent-get", getArgs).then(function (response) {
const session = response.headers.get("x-transmission-session-id");
if (session) {
browser.storage.local.get({}).then(function(storage) {
browser.storage.local.get({}).then(function (storage) {
storage.session = session;
browser.storage.local.set(storage);
});
}
let sponse = response.json();
sponse.then(function(response) {
sponse.then(function (response) {
console.log("(torrent) refreshing", response);
let newTorrents = response.arguments.torrents;
newTorrents.sort((x, y) => y.queuePosition - x.queuePosition);
@@ -125,7 +136,7 @@ function refreshTorrents(server) {
}
function refreshTorrentsLogErr(server) {
return refreshTorrents(server).catch(err => {
return refreshTorrents(server).catch((err) => {
console.error(err);
torrentsError.textContent = "Error: " + err.toString();
});
@@ -135,15 +146,18 @@ function showTorrents(server) {
torrentsPane.hidden = false;
configPane.hidden = true;
for (const opener of document.querySelectorAll(".webui-opener")) {
opener.href = server.base_url + "web/";
let req_url = "http://" + server.bt_rpc_host;
if (server.bt_rpc_port != 0) req_url += ":" + server.bt_rpc_port;
req_url += "/" + server.bt_rpc_path;
opener.href = req_url + "web/";
}
console.log("(torrent) showing torrents");
refreshTorrents(server).catch(_ => refreshTorrentsLogErr(server));
setInterval(() => refreshTorrentsLogErr(server), 2000);
refreshTorrents(server).catch((_) => refreshTorrentsLogErr(server));
setInterval(() => refreshTorrentsLogErr(server), 60000);
}
//let store =
browser.storage.local.get(function(server) {
browser.storage.local.get(function (server) {
console.log("(torrent) querying storage", server);
if (server && server.base_url && server.base_url !== "") {
showTorrents(server);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 165 KiB

After

Width:  |  Height:  |  Size: 80 KiB

View File

@@ -35,11 +35,12 @@
</div>
<div class="hideIfI2PProxyOff" id="readyness">
<img class="readyness" src="http://proxy.i2p/themes/console/images/local_up.png"> <span id="proxy-check">Proxy is ready.</span>
<img class="readyness" src="icons/local_up.png"> <span id="proxy-check">Proxy is ready.</span>
</div>
<div id="i2pbrowser-description">
<p id="description">You are now able to use I2P in this browser.</p>
<button class="hidden" id="visit-irc">Visit IRC</button>
</div>
</div>
@@ -83,9 +84,9 @@
<p id="applicationExplain">These applications use I2P to provide them with security and privacy.</p>
<ul>
<li class="application"><button class="applicationName window-visit-homepage" href="#" id="window-visit-index" target="_blank">Help Page</button> <span class="applicationDesc" id="abouthome">For more information about this extension, go here:</span></li>
<li class="application"><button class="applicationName window-visit-help" href="#" id="window-visit-help" target="_blank">Help Page</button> <span class="applicationDesc" id="abouthome">For more information about this extension, go here:</span></li>
<li class="application"><button class="applicationName window-visit-toopie" href="#" id="window-visit-toopie" target="_blank">Toopie</button> <span class="applicationDesc" id="toopie">For information about your I2P router status, go here:</span></li>
<li class="application window-visit-toopie"><button class="applicationName window-visit-toopie" href="#" id="window-visit-toopie" target="_blank">Toopie</button> <span class="applicationDesc window-visit-toopie" id="toopie">For information about your I2P router status, go here:</span></li>
<li class="application"><button class="applicationName" id="window-visit-i2ptunnel" target="_blank">Hidden Services Manager</button> <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>
@@ -112,6 +113,8 @@
<br>
The server address is not set yet.
<br>
<a class="torrent-opener" id="window-visit-torrent" href="#">For assistance, visit the torrent help page</a>.
<br>
<a class="config-opener" href="#">Open the settings</a> to continue.
</div>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 449 KiB

After

Width:  |  Height:  |  Size: 237 KiB