Merge branch 'i2p-location-header' into 'master'

WIP I2P-Location Header

Closes #1

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!1
This commit is contained in:
idk
2020-09-25 03:25:03 +00:00
35 changed files with 850 additions and 565 deletions

View File

@@ -4,249 +4,249 @@ module.exports = {
es6: true,
webextensions: true
},
extends: "eslint:recommended",
extends: 'eslint:recommended',
globals: {
Atomics: "readonly",
SharedArrayBuffer: "readonly"
Atomics: 'readonly',
SharedArrayBuffer: 'readonly'
},
parserOptions: {
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
}
],
"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
}
],
"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
}
],
"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

@@ -37,11 +37,11 @@ clean: rc clean-artifacts
## EVEN RELEASES are AMO RELEASES
## ODD RELEASES are SELFHOSTED RELEASES
MOZ_VERSION=0.76
VERSION=0.75
MOZ_VERSION=0.78
VERSION=0.77
## INCREMENT THIS EVERY TIME YOU DO A RELEASE
LAST_VERSION=0.73
LAST_VERSION=0.75
YELLOW=F7E59A
ORANGE=FFC56D
@@ -283,6 +283,7 @@ fmt-js:
fixjsstyle options/*.js
fixjsstyle torrent/*.js
fixjsstyle i2pcontrol/*.js
fixjsstyle manifest.json
#find . -path ./node_modules -prune -o -name '*.json' -exec fixjsstyle --write {} \;
lint:

View File

@@ -101,9 +101,14 @@ Usage:
can.
* ![Visiting i2psnark](i2psnark.png)
* ![Monitoring torrents](transmissionrpc.png)
* [Started] Indicate the level of authenticity provided by TLS. TLS is
* [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
distribute some or all of their resources as torrents, allowing the torrents to
be treated effectively as a CDN.
* [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

@@ -16,13 +16,9 @@
"description": "Description of the extension."
},
"extensionVersion": {
"message": "0.71",
"message": "0.77",
"description": "Version of the extension."
},
"extensionStatus": {
"message": "It is a labs project for enhancing your I2P browsing experience.",
"description": "Release status of the extension."
},
"proxyFailedStatus": {
"message": "Proxy is not ready",
"description": "Proxy failed status."

BIN
alternate-address.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 KiB

View File

@@ -154,24 +154,10 @@ function isEmpty(obj) {
return true;
}
var oldtheme = null;
var getOldTheme = async function getOldTheme() {
let foundtheme = await browser.theme.getCurrent();
if (!isEmpty(foundtheme)) {
oldtheme = foundtheme;
console.log('Found old theme', oldtheme);
}
return oldtheme;
}
getOldTheme();
function themeWindow(window) {
// Check if the window is in private browsing
function onThemeError() {
console.log('got theme', oldtheme);
browser.theme.update(oldtheme);
console.log('theme color set error');
}
function logTabs(tabInfo) {
function onContextGotTheme(context) {
@@ -180,15 +166,15 @@ function themeWindow(window) {
if (window.incognito) {
browser.theme.update(window.id, {
colors: {
frame: '#FFC56D',
toolbar: '#FFC56D'
frame: '#363A68',
toolbar: '#363A68'
}
});
} else {
browser.theme.update(window.id, {
colors: {
frame: '#FFC56D',
toolbar: '#FFC56D'
frame: '#363A68',
toolbar: '#363A68'
}
});
}
@@ -203,15 +189,15 @@ function themeWindow(window) {
if (window.incognito) {
browser.theme.update(window.id, {
colors: {
frame: '#A4C8E1',
toolbar: '#A4C8E1'
frame: '#4456B7',
toolbar: '#4456B7'
}
});
} else {
browser.theme.update(window.id, {
colors: {
frame: '#A4C8E1',
toolbar: '#A4C8E1'
frame: '#4456B7',
toolbar: '#4456B7'
}
});
}
@@ -220,15 +206,15 @@ function themeWindow(window) {
if (window.incognito) {
browser.theme.update(window.id, {
colors: {
frame: '#D9D9D6',
toolbar: '#D9D9D6'
frame: '#4456B7',
toolbar: '#4456B7'
}
});
} else {
browser.theme.update(window.id, {
colors: {
frame: '#D9D9D6',
toolbar: '#D9D9D6'
frame: '#4456B7',
toolbar: '#4456B7'
}
});
}
@@ -237,15 +223,15 @@ function themeWindow(window) {
if (window.incognito) {
browser.theme.update(window.id, {
colors: {
frame: '#F7E59A',
toolbar: '#F7E59A'
frame: '#4456B7',
toolbar: '#4456B7'
}
});
} else {
browser.theme.update(window.id, {
colors: {
frame: '#F7E59A',
toolbar: '#F7E59A'
frame: '#4456B7',
toolbar: '#4456B7'
}
});
}
@@ -254,25 +240,18 @@ function themeWindow(window) {
if (window.incognito) {
browser.theme.update(window.id, {
colors: {
frame: '#A48FE1',
toolbar: '#A48FE1'
frame: '#4456B7',
toolbar: '#4456B7'
}
});
} else {
browser.theme.update(window.id, {
colors: {
frame: '#A48FE1',
toolbar: '#A48FE1'
frame: '#4456B7',
toolbar: '#4456B7'
}
});
}
} else {
console.log('Not active in I2P window');
if (isEmpty(oldtheme)) {
browser.theme.reset();
} else {
browser.theme.update(window.id, oldtheme);
}
}
}
if (
@@ -282,10 +261,17 @@ function themeWindow(window) {
browser.contextualIdentities
.get(tabInfo[0].cookieStoreId)
.then(onContextGotTheme, onThemeError);
} else if (isEmpty(oldtheme)) {
browser.theme.reset();
} else {
browser.theme.update(window.id, oldtheme);
}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);
}
}
@@ -435,11 +421,27 @@ gettingListenerInfo.then(got => {
});
function handleUpdated(updateInfo) {
if (updateInfo.theme) {
console.log(`Theme was applied: ${updateInfo.theme}`);
} else {
console.log("Theme was removed");
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);

View File

@@ -12,7 +12,6 @@ function contentUpdateById(id, message) {
contentUpdateById('text-section-header', 'extensionName');
contentUpdateById('description', 'extensionDescription');
contentUpdateById('i2pbrowser-version', 'extensionVersion');
contentUpdateById('beta', 'extensionStatus');
contentUpdateById('proxy-check', 'proxyFailedStatus');
// Control Section

6
debian/changelog vendored
View File

@@ -1,3 +1,9 @@
i2psetproxy.js (0.77-1) UNRELEASED; urgency=low
* Implement x-i2p-location header
-- idk <hankhill19580@gmail.com> Mon, 24 SEP 2020 20:18:03 -0400
i2psetproxy.js (0.73-1) UNRELEASED; urgency=low
* Update bookmarks format

View File

@@ -7,7 +7,12 @@ function routerHost(url) {
if (final === 'i2ptunnelmgr' || final === 'i2ptunnel') {
console.log('(urlcheck) Tunnel application path', final);
return 'i2ptunnelmgr';
} else if (final === 'i2psnark' || final === 'torrents') {
} else if (
final === 'i2psnark' ||
final === 'torrents' ||
final.startsWith('transmission') ||
final.startsWith('tracker')
) {
console.log('(urlcheck) Torrent application path', final);
return 'i2psnark';
} else if (final === 'webmail' || final === 'susimail') {
@@ -15,13 +20,14 @@ function routerHost(url) {
return 'webmail';
} else if (final.startsWith('MuWire')) {
if (!url.includes('.png')) {
console.log('(urlcheck) MuWire application path', final);
return 'muwire';
console.log('(urlcheck) MuWire application path', final);
return 'muwire';
}
} else if (
final === 'home' ||
final === 'console' ||
final === 'dns' ||
final === 'sitemap' ||
final.startsWith('config')
) {
console.log('(urlcheck) Console application path', final);

155
home.css
View File

@@ -1,20 +1,23 @@
* {
padding: 0;
background: #1f1a24;
color: #e6e6e7;
margin: 0
}
html {
height: 100%
}
a,
button {
color: #3b6bbf;
text-decoration: none;
background: none;
font-weight: 700;
word-wrap: break-word;
outline: 0
outline: 0;
padding: 3px;
display: inline-block;
margin: auto
}
.applicationDesc {
color: #81888f;
color: #e6e6e7;
text-decoration: none;
font-weight: 700;
word-wrap: break-word;
@@ -36,26 +39,27 @@ button {
text-decoration: none;
font-weight: 700;
word-wrap: break-word;
width: 90%;
outline: 0
}
body {
display: flex;
flex-direction: column;
font-family: "Droid Sans","Noto Sans",Ubuntu,"Segoe UI","Lucida Grande",Verdana,Helvetica,sans-serif;
width: 100%;
height: 100%;
margin: 0 auto;
padding: 0;
color: #495057;
background-attachment: fixed;
background-size: 100% 100%;
color: #e6e6e7;
text-decoration: none;
font-weight: 700;
word-wrap: break-word;
outline: 0
}
.button-list {
display: inline-flex;
min-height: 230px;
min-width: 230px
}
.background {
background-color: #f8f8ff;
height: 100%
}
p {
@@ -63,7 +67,7 @@ p {
font-size: 17px;
font-family: "Droid Sans","Noto Sans",Ubuntu,"Segoe UI","Lucida Grande",Verdana,Helvetica,sans-serif;
text-decoration: none;
color: #495057;
color: #e6e6e7;
font-weight: 700;
word-wrap: break-word;
outline: 0
@@ -72,11 +76,8 @@ p {
min-height: 3rem;
padding: 1rem;
margin: 1.5rem;
display: inline-block;
border: 1px solid #d9d9d6;
display: block;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc;
background: #f8f8ff;
min-width: 95%
}
#header,
@@ -87,23 +88,17 @@ p {
min-height: 3rem;
padding: 1rem;
margin-top: 1.5rem;
display: inline-block;
border: 1px solid #d9d9d6;
display: block;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc;
background: #f8f8ff;
min-width: 95%
}
h1 {
margin-right: auto;
margin: auto;
font-family: "Droid Sans","Noto Sans",Ubuntu,"Segoe UI","Lucida Grande",Verdana,Helvetica,sans-serif;
font-weight: 600;
font-size: 32px;
text-transform: uppercase;
color: #41465f;
border: 1px solid #dee2e6;
border-radius: 2px 2px 0 0;
padding-left: 5%
color: #e6e6e7;
border-radius: 2px 2px 0 0
}
h2,
h3 {
@@ -111,8 +106,7 @@ h3 {
font-family: "Droid Sans","Noto Sans",Ubuntu,"Segoe UI","Lucida Grande",Verdana,Helvetica,sans-serif;
font-weight: 600;
font-size: 25px;
text-transform: uppercase;
color: #41465f;
color: #e6e6e7;
border-radius: 2px 2px 0 0;
width: 90%;
padding-left: 5%
@@ -122,9 +116,7 @@ h4 {
font-family: "Droid Sans","Noto Sans",Ubuntu,"Segoe UI","Lucida Grande",Verdana,Helvetica,sans-serif;
font-weight: 600;
font-size: 20px!important;
text-transform: uppercase;
color: #41465f;
border: 1px solid #dee2e6;
border-radius: 2px 2px 0 0;
width: 90%;
padding-left: 5%
@@ -132,8 +124,6 @@ h4 {
.showhider {
margin-right: auto;
font-family: "Droid Sans","Noto Sans",Ubuntu,"Segoe UI","Lucida Grande",Verdana,Helvetica,sans-serif;
text-transform: uppercase;
background: 0 0!important;
border: none;
padding: 0!important;
width: 90%;
@@ -153,19 +143,19 @@ h4 {
margin-bottom: 80px
}
ul {
margin-left: 2rem;
list-style: none
margin: auto;
width: 85vw;
border-radius: 2px
}
li {
min-height: 3rem;
padding: .5rem;
background: #dee2e6;
border: 1px solid #dee2e6;
width: 64%;
min-width: 64%;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc;
margin: .5rem .5rem .5rem 32%
display: block;
text-align: center
}
.center {
display: block;
margin-left: auto;
margin-right: auto;
width: 50%
}
#readyness {
padding-top: 1rem;
@@ -173,12 +163,9 @@ li {
margin: 1rem;
width: 42%;
min-width: 42%;
background: #dee2e6;
text-align: center!important;
border: 1px solid #dee2e6;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc;
display: inline-block
display: block
}
#onboarding {
min-height: 5rem;
@@ -188,22 +175,22 @@ li {
width: 42%;
min-width: 42%;
font-size: 2rem;
background: #a48fe1;
text-align: center!important;
border: 1px solid #a48fe1;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc
border-radius: 2px
}
#i2pbrowser-description {
padding-top: 1rem;
padding-bottom: 1rem;
width: 50%;
min-width: 50%;
display: inline-block;
background: #dee2e6;
border: 1px solid #dee2e6;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc
display: block
}
html body ul.label-list li {
list-style: none;
float: left
}
html body ul.label-list li:nth-child(odd) {
clear: left
}
#linksExplain {
min-height: 5rem;
@@ -211,24 +198,15 @@ li {
margin: .5rem;
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
border-radius: 2px
}
#applicationExplain,
#controlExplain {
min-height: 5rem;
padding: .5rem;
margin: .5rem;
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;
text-align: left!important;
float: left
}
#proxyReady {
@@ -237,13 +215,9 @@ li {
margin: .2rem;
width: 38%;
min-width: 38%;
display: inline-block;
background: #d9d9d6;
display: block;
float: right;
text-align: center!important;
border: 1px solid #d9d9d6;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc
text-align: center!important
}
#proxyUnready {
min-height: 3rem;
@@ -251,13 +225,9 @@ li {
margin: .2rem;
width: 38%;
min-width: 38%;
display: inline-block;
display: block;
float: right;
text-align: center!important;
border: 1px solid #ffc56d;
border-radius: 2px;
background: #ffc56d;
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc
text-align: center!important
}
#consoleOn {
min-height: 3rem;
@@ -265,13 +235,19 @@ li {
margin: .2rem;
width: 38%;
min-width: 38%;
display: inline-block;
display: block;
float: left;
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
text-align: center!important
}
.tabicon {
min-width: 64px;
min-height: 64px
}
li.application {
text-align: left
}
button.applicationName {
width: auto
}
.onboardingContent {
font-size: .8rem!important;
@@ -287,7 +263,9 @@ li {
opacity: 1
}
img {
max-width: 100%
max-width: 100%;
width: 90%;
margin: 3%
}
img.readyness {
height: 100%;
@@ -297,4 +275,9 @@ img.readyness {
.application-info {
display: none
}
}
@media only screen and (max-height: 399px) {
body {
flex-direction: row
}
}

View File

@@ -122,19 +122,19 @@
</p>
<ul>
<li>
<li class="application">
<a href="http://i2p-projekt.i2p/" id="window-visit-i2p">I2P Project Homepage:</a> <span class="applicationDesc" id="i2ppage">More information is available here.</span>
</li>
<li>
<li class="application">
<a href="/index.html" id="window-visit-homepage">Webextension Homepage:</a> <span class="applicationDesc" id="webpage">More information is available here.</span>
</li>
<li>
<li class="application">
<a href="http://gittest.i2p/idk/I2P-in-Private-Browsing-Mode-Firefox" id="window-visit-sources">Source Code:</a> <span class="applicationDesc" id="sources">Browse the source of this webextension or contribute here.</span>
</li>
<li>
<li class="application">
<a href="http://gittest.i2p/idk/I2P-in-Private-Browsing-Mode-Firefox/-/releases" id="window-visit-releases">Releases:</a> <span class="applicationDesc" id="releases">Check for new releases here.</span>
</li>
</ul>

12
host.js
View File

@@ -71,7 +71,8 @@ function routerHost(url) {
} else if (
final === 'i2psnark' ||
final === 'torrents' ||
final.startsWith('transmission')
final.startsWith('transmission') ||
final.startsWith('tracker')
) {
console.log('(urlcheck) Torrent application path', final);
return 'i2psnark';
@@ -110,6 +111,15 @@ function routerHost(url) {
if (hostname === control_host + ':' + control_port) {
return pathcheck(path);
}
if (hostname === control_host + ':' + '7662') {
return pathcheck(path);
}
if (hostname === 'localhost' + ':' + '7662') {
return pathcheck(path);
}
if (hostname === '127.0.0.1' + ':' + '7662') {
return pathcheck(path);
}
if (hostname === 'localhost' + ':' + control_port) {
return pathcheck(path);
}

BIN
icons/browse.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
icons/i2plogo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

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

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
images/gear.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

59
images/restart.svg Normal file
View File

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

After

Width:  |  Height:  |  Size: 2.4 KiB

59
images/shutdown.svg Normal file
View File

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

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -105,7 +105,11 @@
<li><img alt="Monitoring torrents" src="transmissionrpc.png" title="">
</li>
<li>[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.</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 distribute some or all of their resources as torrents, allowing the torrents to be treated effectively as a CDN.</li>
<li>[barely started] <strong>Isolate</strong> traffic by contextual identity to it's own HTTP Proxy tunnel, each reflecting it's own pseudonymous identity within I2P. The contextual identities. For now, the contextual identities used to manage browsing are "I2P Browsing" and "Web Browsing" where I2P Browsing is capable of using an outproxy but in the case of traffic destined for the clearnet does not do header rewriting, and Web Browsing falls back to the Proxy configured in Firefox. The I2P Browsing will be expanded to
<ul>

View File

@@ -1,24 +1,19 @@
body,
html {
width: 50rem
}
a {
margin: 10px
}
.panel {
margin: 5px
}
span.identity {
width: 100px;
display: inline-block;
display: block;
margin-left: 1em
}
figcaption {
display: inline
display: block
}
.section-header {
display: flex;
flex-direction: row;
margin-bottom: 8px
}
p {

33
info.js
View File

@@ -79,6 +79,30 @@ document.addEventListener("click", clickEvent => {
} else if (clickEvent.target.id === "label-router-shutdown") {
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"){
console.log("hiding label-status-list");
document.getElementById("label-status-list").style.display = "none"
}else{
console.log("showing label-status-list");
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"){
console.log("hiding label-peers-list");
document.getElementById("label-peers-list").style.display = "none"
}else{
console.log("showing label-peers-list");
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"){
console.log("hiding label-bandwidth-list");
document.getElementById("label-bandwidth-list").style.display = "none"
}else{
console.log("showing label-bandwidth-list");
document.getElementById("label-bandwidth-list").style.display = "block"
}
} else if (clickEvent.target.id === "search-submit") {
console.log("attempting to create search tab");
goSearch();
@@ -133,6 +157,15 @@ document.addEventListener("click", clickEvent => {
clickEvent.preventDefault();
});
window.onload = function(e){
if (document.getElementById("label-peers-list") != null) {
document.getElementById("label-peers-list").style.display = "none"
}
if (document.getElementById("label-bandwidth-list") != null) {
document.getElementById("label-bandwidth-list").style.display = "none"
}
}
function proxyReadiness() {
console.log(this.responseText);
}

36
location.html Normal file
View File

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

20
location.js Normal file
View File

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

View File

@@ -26,22 +26,21 @@
],
"manifest_version": 2,
"name": "__MSG_extensionName__",
"version": "0.73",
"version_name": "0.73",
"version": "0.78",
"description": "__MSG_extensionDescription__",
"homepage_url": "https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox",
"icons": {
"48": "icons/toopie.png"
"48": "icons/i2plogo.png"
},
"browser_action": {
"browser_style": true,
"default_icon": "icons/toopie.png",
"default_icon": "icons/i2plogo.png",
"default_title": "__MSG_extensionName__",
"default_popup": "window.html"
},
"sidebar_action": {
"browser_style": true,
"default_icon": "icons/logo.png",
"default_icon": "icons/i2plogo.png",
"default_title": "__MSG_toopieName__",
"default_panel": "toopie.html",
"open_at_install": false
@@ -56,12 +55,17 @@
"http://*.b32.i2p/*",
"https://*.b32.i2p/*"
],
"default_panel": "security.html",
"pinned": true
},
"options_ui": {
"page": "options/options.html"
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["script.js"]
}
],
"background": {
"persistent": true,
"scripts": [

View File

@@ -166,7 +166,7 @@ function AssurePeerConnection() {
value: false
});
chrome.privacy.network.webRTCIPHandlingPolicy.set({
value: "proxy_only"
value: "disable_non_proxied_udp"
});
}
let rtc = browser.privacy.network.peerConnectionEnabled.get({});
@@ -343,9 +343,7 @@ function i2pHost(url) {
function onContextGotLog(contexts) {
if (contexts != null) {
for (let context of contexts) {
console.log(context);
}
console.log(contexts);
}
}

View File

@@ -4,16 +4,16 @@ var routerpref = chrome.i18n.getMessage('routerPreface');
var routerprefpriv = chrome.i18n.getMessage('routerPrefacePrivate');
browser.privacy.network.peerConnectionEnabled.set({
value: false
value: true
});
console.log('Preliminarily disabled WebRTC.');
chrome.privacy.network.networkPredictionEnabled.set({
value: false
});
chrome.privacy.network.webRTCIPHandlingPolicy.set({
value: 'proxy_only'
value: 'disable_non_proxied_udp'
});
console.log('Disabled unproxied UDP.');
function shouldProxyRequest(requestInfo) {
return requestInfo.parentFrameId != -1;

21
script.js Normal file
View File

@@ -0,0 +1,21 @@
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{
};
}
}
return Promise.resolve({content: response});
});

108
scrub.js
View File

@@ -205,6 +205,11 @@ var contextSetup = function(requestDetails) {
});
pins.then(closeOldTab, onError);
}
if (requestDetails.url.endsWith('xhr1.html')) {
hostname = url.split('/')[2];
let prefix = url.substr(0, url.indexOf('://') + 3);
requestDetails.url = prefix + hostname + '/home';
}
var created = browser.tabs.create({
active: true,
pinned: true,
@@ -246,6 +251,11 @@ var contextSetup = function(requestDetails) {
});
pins.then(closeOldTab, onError);
}
if (requestDetails.url.endsWith('xhr1.html')) {
hostname = url.split('/')[2];
let prefix = url.substr(0, url.indexOf('://') + 3);
requestDetails.url = prefix + hostname + '/i2ptunnelmgr/';
}
var created = browser.tabs.create({
active: true,
pinned: true,
@@ -287,6 +297,11 @@ var contextSetup = function(requestDetails) {
});
pins.then(closeOldTab, onError);
}
if (requestDetails.url.endsWith('xhr1.html')) {
hostname = url.split('/')[2];
let prefix = url.substr(0, url.indexOf('://') + 3);
requestDetails.url = prefix + hostname + '/i2psnark/';
}
var created = browser.tabs.create({
active: true,
pinned: true,
@@ -328,6 +343,11 @@ var contextSetup = function(requestDetails) {
});
pins.then(closeOldTab, onError);
}
if (requestDetails.url.endsWith('xhr1.html')) {
hostname = url.split('/')[2];
let prefix = url.substr(0, url.indexOf('://') + 3);
requestDetails.url = prefix + hostname + '/muwire/';
}
var created = browser.tabs.create({
active: true,
pinned: true,
@@ -369,6 +389,11 @@ var contextSetup = function(requestDetails) {
});
pins.then(closeOldTab, onError);
}
if (requestDetails.url.endsWith('xhr1.html')) {
hostname = url.split('/')[2];
let prefix = url.substr(0, url.indexOf('://') + 3);
requestDetails.url = prefix + hostname + '/webmail/';
}
var created = browser.tabs.create({
active: true,
pinned: true,
@@ -563,6 +588,89 @@ var contextSetup = function(requestDetails) {
}
};
var coolheadersSetup = function(e) {
var asyncSetPageAction = new Promise((resolve, reject) => {
window.setTimeout(() => {
for (i = 0; i < e.responseHeaders.length; i++) {
let header = e.responseHeaders[i];
if (header.name.toUpperCase() === 'I2P-LOCATION' || header.name.toUpperCase() === 'X-I2P-LOCATION') {
browser.pageAction.setPopup({
tabId: e.tabId,
popup: 'location.html'
});
browser.pageAction.setIcon({path: 'icons/i2plogo.png', tabId: e.tabId});
browser.pageAction.setTitle({
tabId: e.tabId,
title: header.value
});
browser.pageAction.show(e.tabId);
break;
}
if (header.name.toUpperCase() === 'I2P-TORRENTLOCATION' || header.name.toUpperCase() === 'X-I2P-TORRENTLOCATION') {
browser.pageAction.setPopup({
tabId: tabId.id,
popup: 'torrent.html'
});
browser.pageAction.setIcon({path: 'icons/i2plogo.png', tabId: e.tabId});
browser.pageAction.show(e.tabId);
browser.pageAction.setTitle({
tabId: e.tabId,
title: header.value
});
break;
}
}
resolve({responseHeaders: e.responseHeaders});
}, 2000);
});
return asyncSetPageAction;
}
function getClearTab(tobj) {
function getTabURL(tab) {
browser.tabs.sendMessage( tab.id, {'req':'i2p-location'}).then( response => {
if (response.content.toUpperCase() != "no-alt-location"){
browser.pageAction.setPopup({
tabId: tab.id,
popup: 'location.html'
});
browser.pageAction.setIcon({path: 'icons/i2plogo.png', tabId: tab.id});
browser.pageAction.setTitle({
tabId: tab.id,
title: response.content
});
browser.pageAction.show(tab.id);
}
});
console.log("(pageaction)", tab.id, tab.url)
}
browser.tabs.get(tobj.tabId).then(getTabURL, onError)
}
browser.tabs.onActivated.addListener(getClearTab);
function reloadTabs(tabs) {
for (let tab of tabs) {
browser.tabs.reload(tab.id)
}
}
function reloadError(error) {
console.log(`Error: ${error}`);
}
let querying = browser.tabs.query({});
querying.then(reloadTabs, onError);
// Listen for onHeaderReceived for the target page.
// Set "blocking" and "responseHeaders".
browser.webRequest.onHeadersReceived.addListener(
coolheadersSetup,
{urls: ['<all_urls>']},
["blocking", "responseHeaders"]
);
browser.webRequest.onBeforeRequest.addListener(
contextSetup,
{ urls: ['<all_urls>'] },

View File

@@ -2,13 +2,9 @@
overflow: hidden;
min-height: 3rem;
padding: .5rem;
background: #dee2e6;
border: 1px solid #dee2e6;
width: 64%;
min-width: 64%;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc;
margin: .5rem .5rem .5rem 32%
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc
}
.topnav a {
float: left;
@@ -24,10 +20,11 @@
color: #fff
}
.topnav input[type=search] {
float: right;
width: 75%;
padding: 6px;
border: none;
margin-top: 8px;
color: #e6e6e7;
margin-right: 16px
}
.topnav input[type=submit] {
@@ -35,6 +32,7 @@
padding: 6px;
border: none;
margin-top: 8px;
color: #e6e6e7;
margin-right: 16px
}
@media screen and (max-width: 600px) {

View File

@@ -6,57 +6,81 @@
<link href="sidebar.css" rel="stylesheet" type="text/css">
</head>
<body>
<script src="i2pcontrol/i2pcontrol.js"></script>
<script src="info.js"></script>
<script src="content.js"></script>
<h1>I2P Router Information</h1>
<ul>
<li><button id="label-router-restart" target="_blank">Restart: <span id="router-restart">Gracefully restart router</span></button>
<li>
<a href="http://localhost:7657" target="_blank"><img alt="i2p router console" class="center" src="/icons/i2plogo.png"></a>
</li>
</ul>
<ul class="button-list">
<li><button id="label-router-restart" target="_blank"><img alt="Restart:" id="label-router-shutdown" src="/images/restart.svg"></button>
<br>
<span id="router-restart">Gracefully restart router</span>
</li>
<li><button id="label-router-shutdown" target="_blank">Shutdown: <span id="router-shutdown">Gracefully shutdown router</span></button>
<li><button id="label-router-shutdown" target="_blank"><img alt="Shutdown:" id="label-router-shutdown" src="/images/shutdown.svg"></button>
<br>
<span id="router-shutdown">Gracefully shutdown router</span>
</li>
</ul>
<ul>
<li><button id="label-router-status" target="_blank">Status</button>
</li>
</ul>
<ul class="label-list" id="label-status-list">
<li><span id="label-router-status">Router Status:</span> <span id="router-status">Replace with Router Status</span></li>
<li><span id="label-router-uptime">Router Uptime(Ms):</span> <span id="router-uptime">Replace with Router Uptime</span></li>
<li><span id="label-router-version">Router Version:</span> <span id="router-version">Replace with Router Version</span></li>
</ul>
<li>
<ul>
<li><span id="label-router-bw-outbound-1s">Outbound bw 1s:</span> <span id="router-net-bw-outbound-1s">Replace with Router Bandwidth Outbound 1s</span></li>
<li><span id="label-router-bw-outbound-15s">Outbound bw 15s:</span> <span id="router-net-bw-outbound-15s">Replace with Router Bandwidth Outbound 15s</span></li>
<li><span id="label-router-bw-inbound-1s">Inbound bw 1s:</span> <span id="router-net-bw-inbound-1s">Replace with Router Bandwidth Inbound 1s</span></li>
<li><span id="label-router-bw-inbound-15s">Inbound bw 15s:</span> <span id="router-net-bw-inbound-15s">Replace with Router Bandwidth Outbound 15s</span></li>
</ul>
</li>
<!--<li>
<span id="label-router-net-status">Network Status:</span>
<span id="router-net-status">Replace with Router Network Status</span>
</li>-->
<li>
<ul>
<li><span id="label-router-net-tunnels-participating">Participating Tunnels:</span> <span id="router-net-tunnels-participating">Replace with Router Participating Tunnel Count</span></li>
<li><span id="label-router-activepeers">Active Peers:</span> <span id="router-netdb-activepeers">Replace with Router Active Peers</span></li>
<li><span id="label-router-netdb-fastpeers">Fast Peers:</span> <span id="router-netdb-fastpeers">Replace with Router Fast Peers</span></li>
<li><span id="label-router-netdb-highcapacitypeers">High Capacity Peers:</span> <span id="router-netdb-highcapacitypeers">Replace with High Capacity Peers</span></li>
<li><span id="label-router-netdb-isreseeding">Reseed status:</span> <span id="router-netdb-isreseeding">Replace with Router netDB Reseeding Status</span></li>
<li><span id="label-router-netdb-knownpeers">Known Peers:</span> <span id="router-netdb-knownpeers">Replace with Router Known Peers</span></li>
</ul>
<ul>
<li><button id="label-router-bandwidth" target="_blank">Bandwidth</button>
</li>
</ul>
<script src="i2pcontrol/i2pcontrol.js"></script>
<script src="info.js"></script>
<script src="content.js"></script>
<ul class="label-list" id="label-bandwidth-list">
<li><span id="label-router-bw-outbound-1s">Outbound bw 1s:</span> <span id="router-net-bw-outbound-1s">Replace with Router Bandwidth Outbound 1s</span></li>
<li><span id="label-router-bw-outbound-15s">Outbound bw 15s:</span> <span id="router-net-bw-outbound-15s">Replace with Router Bandwidth Outbound 15s</span></li>
<li><span id="label-router-bw-inbound-1s">Inbound bw 1s:</span> <span id="router-net-bw-inbound-1s">Replace with Router Bandwidth Inbound 1s</span></li>
<li><span id="label-router-bw-inbound-15s">Inbound bw 15s:</span> <span id="router-net-bw-inbound-15s">Replace with Router Bandwidth Outbound 15s</span></li>
</ul>
<!--<li>
<span id="label-router-net-status">Network Status:</span>
<span id="router-net-status">Replace with Router Network Status</span>
</li>-->
<ul>
<li><button id="label-router-peers" target="_blank">Peers</button>
</li>
</ul>
<ul class="label-list" id="label-peers-list">
<li><span id="label-router-net-tunnels-participating">Transit Tunnels:</span> <span id="router-net-tunnels-participating">Replace with Router Participating Tunnel Count</span></li>
<li><span id="label-router-activepeers">Active Peers:</span> <span id="router-netdb-activepeers">Replace with Router Active Peers</span></li>
<li><span id="label-router-netdb-fastpeers">Fast Peers:</span> <span id="router-netdb-fastpeers">Replace with Router Fast Peers</span></li>
<li><span id="label-router-netdb-highcapacitypeers">High Capacity Peers:</span> <span id="router-netdb-highcapacitypeers">Replace with High Capacity Peers</span></li>
<li><span id="label-router-netdb-isreseeding">Reseed status:</span> <span id="router-netdb-isreseeding">Replace with Router netDB Reseeding Status</span></li>
<li><span id="label-router-netdb-knownpeers">Known Peers:</span> <span id="router-netdb-knownpeers">Replace with Router Known Peers</span></li>
</ul>
<br>
<br>
</body>
</html>

39
torrent.html Normal file
View File

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

0
torrent.js Normal file
View File

View File

@@ -12,7 +12,7 @@
<body>
<div class="section-header panel-section panel-section-header" id="topbar">
<!--<div class="text-section-header" id="text-section-header">-->
<img height="32px" src="icons/toopie.png" width="32px"> <a href="#" id="browser-action">Browse</a> <img height="32px" src="icons/torrents.png" width="32px"> <a href="#" id="torrent-action">Download</a> <!--</div>-->
<a href="#" id="browser-action"><img class="tabicon" height="32px" src="icons/browse.png" width="32px">Browse</a> <a href="#" id="torrent-action"><img class="tabicon" height="32px" src="icons/torrents.png" width="32px">Download</a> <!--</div>-->
</div>
<div id="browserpanel">
@@ -40,8 +40,6 @@
<div id="i2pbrowser-description">
<p id="description">You are now able to use I2P in this browser.</p>
<p id="beta">It is experimental.</p>
</div>
</div>
@@ -131,10 +129,10 @@
<div hidden="" id="torrents-pane">
<header>
<h1>Torrent Controls</h1>
<a class="webui-opener" href="#" target="_blank"><img alt="Open Web UI" src="icon.svg"></a> <!--<a class="config-opener" href="#">
<img alt="Settings" src="gear.svg"></a>
<a class="webui-opener" href="#" target="_blank"><img alt="Open Web UI" src="images/i2plogo.png"></a> <!--<a class="config-opener" href="#">
<img alt="Settings" src="images/gear.svg"></a>
<a class="info-opener" href="https://github.com/myfreeweb/transmitter" target="_blank">
<img alt="Extension Info" src="info.svg"></a>-->
<img alt="Extension Info" src="images/info.svg"></a>-->
</header>
<input id="torrents-search" placeholder="Search…" type="search">
<template id="torrents-tpl">