Compare commits
49 Commits
code-clean
...
silly-fail
Author | SHA1 | Date | |
---|---|---|---|
92184a4282 | |||
2805bbb0e9 | |||
f12ac06420 | |||
8f1d150bad | |||
4e7381ece9 | |||
a911fc3126 | |||
c58cf63027 | |||
a76e7299c7 | |||
26b637f201 | |||
c1b55a4feb | |||
80c66ba2f7 | |||
6415ee2996 | |||
83b5dcc4b4 | |||
26e0228687 | |||
73f2883fbd | |||
4d317eac4c | |||
4755637206 | |||
b84d8945aa | |||
7e1428310b | |||
7cc6dbfdf0 | |||
e95d67db4b | |||
a261f7875a | |||
78141f2839 | |||
75d23a752c | |||
03cc374c54 | |||
89f8496bb8 | |||
15489b7f10 | |||
3a67d00741 | |||
d5a0edfd68 | |||
1853292b99 | |||
f575f95ee2 | |||
97146391e8 | |||
31af292a47 | |||
ac548b58b0 | |||
aa6a9a0da8 | |||
7bfc4f8c66 | |||
ffc29deb8e | |||
78a01f6cc1 | |||
d09bb59a1f | |||
e2f8a439b6 | |||
95a282c07f | |||
02f3cc871d | |||
5d260c5a3e | |||
b5758839e1 | |||
a473da6a8e | |||
75b4ff4b60 | |||
87c3a62f25 | |||
4bc984a72d | |||
80d5367fed |
41
Makefile
41
Makefile
@ -37,11 +37,11 @@ clean: rc clean-artifacts
|
||||
## EVEN RELEASES are AMO RELEASES
|
||||
## ODD RELEASES are SELFHOSTED RELEASES
|
||||
|
||||
MOZ_VERSION=0.108
|
||||
VERSION=0.107
|
||||
MOZ_VERSION=0.130
|
||||
VERSION=0.129
|
||||
|
||||
## INCREMENT THIS EVERY TIME YOU DO A RELEASE
|
||||
LAST_VERSION=0.105
|
||||
LAST_VERSION=0.125
|
||||
|
||||
YELLOW=F7E59A
|
||||
ORANGE=FFC56D
|
||||
@ -96,20 +96,20 @@ xpi: getxpi
|
||||
|
||||
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\": " manifest.json)| \"version\": \"$(VERSION)\",|g' manifest.json
|
||||
# sed -i 's|$(shell grep "\"version_name\": " manifest.json)| \"version_name\": \"$(VERSION)\",|g' manifest.json
|
||||
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\": " manifest.json)| \"version\": \"$(MOZ_VERSION)\",|g' manifest.json
|
||||
# sed -i 's|$(shell grep "\"version_name\": " manifest.json)| \"version_name\": \"$(MOZ_VERSION)\",|g' manifest.json
|
||||
find . -name '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
|
||||
sed -i 's|$(shell grep " \" version\": " manifest.json)| \"version\": \"$(VERSION)1\",|g' manifest.json
|
||||
# sed -i 's|$(shell grep "\"version_name\": " manifest.json)| \"version_name\": \"$(VERSION)1-rhizome\",|g' manifest.json
|
||||
sed -i 's|7657|7647|g' *.js* torrent/*.js*
|
||||
|
||||
@ -147,7 +147,10 @@ recreate-release: delete-release release upload
|
||||
|
||||
upload: upload-xpi upload-deb
|
||||
|
||||
full-release: release submit upload-xpi torrent upload-torrent deb upload-deb upload-rss seed
|
||||
moz-release: release moz-submit
|
||||
#upload-xpi torrent upload-torrent deb upload-deb upload-rss seed
|
||||
|
||||
full-sign: moz-sign upload-xpi torrent upload-torrent deb upload-deb upload-rss seed
|
||||
|
||||
WEB_EXT_API_KEY=AMO_KEY
|
||||
WEB_EXT_API_SECRET=AMO_SECRET
|
||||
@ -168,7 +171,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/bin/web-ext sign --channel unlisted --config-discovery false --api-key $(WEB_EXT_API_KEY) --api-secret $(WEB_EXT_API_SECRET)
|
||||
$(HOME)/web-ext/bin/web-ext sign --channel unlisted --config-discovery false --api-key $(WEB_EXT_API_KEY) --api-secret $(WEB_EXT_API_SECRET) --timeout 900000 #--api-url-prefix http://localhost:3000/api/v4
|
||||
make copyss
|
||||
sleep 5
|
||||
|
||||
@ -182,7 +185,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
|
||||
$(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
|
||||
$(HOME)/web-ext/bin/web-ext sign --channel listed --config-discovery false --api-key $(WEB_EXT_API_KEY) --api-secret $(WEB_EXT_API_SECRET) --timeout 900000 --verbose; true #--api-url-prefix http://localhost:3000/api/v4
|
||||
sleep 5
|
||||
mv .manifest.json manifest.json
|
||||
|
||||
@ -284,6 +287,8 @@ fmt-js:
|
||||
fixjsstyle torrent/*.js
|
||||
fixjsstyle i2pcontrol/*.js
|
||||
fixjsstyle manifest.json
|
||||
#work around fixjsstyle issue
|
||||
sed -i 's|= >|=>|g' *.js */*.js
|
||||
#find . -path ./node_modules -prune -o -name '*.json' -exec fixjsstyle --write {} \;
|
||||
|
||||
fmt-prettier:
|
||||
@ -328,7 +333,7 @@ upload-updatemanifest:
|
||||
gothub upload -R -u eyedeekay -r I2P-in-Private-Browsing-Mode-Firefox -t docs -n "updateManifest.json" -f updateManifest.json
|
||||
|
||||
webext:
|
||||
$(HOME)/node_modules/web-ext/bin/web-ext run --firefox /usr/bin/firefox -u "about:devtools-toolbox?type=extension&id=i2ppb%40eyedeekay.github.io"
|
||||
$(HOME)/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
|
||||
@ -345,7 +350,7 @@ wire:
|
||||
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 \
|
||||
$(HOME)/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 \
|
||||
@ -359,10 +364,22 @@ ndtest:
|
||||
-u https://ramble.pw/f/i2p \
|
||||
|
||||
lht-test:
|
||||
$(HOME)/node_modules/web-ext/bin/web-ext run --firefox /usr/bin/firefox -u about:debugging \
|
||||
$(HOME)/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
|
||||
|
||||
android:
|
||||
$(HOME)/web-ext/bin/web-ext run --target firefox-android \
|
||||
--android-device NE1GAM7780819544 \
|
||||
--browser-console
|
||||
|
||||
run:
|
||||
$(HOME)/web-ext/bin/web-ext run --firefox /usr/bin/firefox -u about:debugging
|
||||
|
||||
chromium:
|
||||
$(HOME)/web-ext/bin/web-ext run --target chromium
|
||||
|
15
README.md
15
README.md
@ -2,13 +2,14 @@ I2P in Private Browsing Mode(Firefox-Only)
|
||||
==========================================
|
||||
|
||||
This is an webextension which introduces a set of new "Private Browsing" modes
|
||||
to Firefox-based browsers(Supporting webextensions) that makes it easier to
|
||||
configure a browser to use I2P securely and adds features for making I2P
|
||||
applications easier to use. It does this by isolating I2P-specific settings to
|
||||
Contextual Identities within Firefox, then loading them automatically when the
|
||||
user requests them. It also adds convenience and management features, like an
|
||||
embedded I2P console and Bittorrent integration with clients using the
|
||||
transmission-rpc API.
|
||||
to Firefox-based browsers(Supporting webextensions, must be current ESR or
|
||||
greater) that makes it easier to configure a browser to use I2P securely and
|
||||
adds features for making I2P applications easier to use. It does this by
|
||||
isolating I2P-specific settings to Contextual Identities within Firefox, then
|
||||
loading them automatically when the user requests them. It also adds convenience
|
||||
and management features, like an embedded I2P console and Bittorrent integration
|
||||
with clients using the transmission-rpc API and via in-browser protocol handling
|
||||
integrations.
|
||||
|
||||
Privacy Policy
|
||||
--------------
|
||||
|
@ -1,314 +1,322 @@
|
||||
{
|
||||
"extensionName": {
|
||||
"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."
|
||||
},
|
||||
"toopieTLS": {
|
||||
"message": "Site Properties",
|
||||
"description": "Name of the security panel."
|
||||
},
|
||||
"extensionDescription": {
|
||||
"message": "Your browser is now set up to use I2P.",
|
||||
"description": "Description of the extension."
|
||||
},
|
||||
"extensionVersion": {
|
||||
"message": "0.107",
|
||||
"description": "Version of the extension."
|
||||
},
|
||||
"proxyFailedStatus": {
|
||||
"message": "Proxy is not ready",
|
||||
"description": "Proxy failed status."
|
||||
},
|
||||
"proxySuccessStatus": {
|
||||
"message": "Proxy is ready",
|
||||
"description": "Proxy failed status."
|
||||
},
|
||||
"controlHeader": {
|
||||
"message": "Control",
|
||||
"description": "Headline for control panel."
|
||||
},
|
||||
"controlExplain": {
|
||||
"message": "These controls are used to tailor your I2P Browsing Experience",
|
||||
"description": "Introduce the control panel."
|
||||
},
|
||||
"clearData": {
|
||||
"message": "Clear Browsing Data: ",
|
||||
"description": "Clear Browsing Data menu item."
|
||||
},
|
||||
"clearDesc": {
|
||||
"message": "Use this to erase your I2P browsing data.",
|
||||
"description": "Clear browsing data action description."
|
||||
},
|
||||
"enableWebRTC": {
|
||||
"message": "Enable WebRTC with proxy?",
|
||||
"description": "WebRTC checkbox label."
|
||||
},
|
||||
"rtcDesc": {
|
||||
"message": "WebRTC is disabled by default, but you can turn it back on and force it to honor the proxy. If you are a user of the Snowflake browser extension, this option is disabled and WebRTC is turned on by default.",
|
||||
"description": "WebRTC action description"
|
||||
},
|
||||
"disableHistory": {
|
||||
"message": "Disable History in I2P Tabs?",
|
||||
"description": "History checkbox label."
|
||||
},
|
||||
"histDesc": {
|
||||
"message": "History is automatically cleared when your I2P tabs are closed. If you want to clear history as you go, check this box.",
|
||||
"description": "History action description"
|
||||
},
|
||||
"applicationHeader": {
|
||||
"message": "Applications",
|
||||
"description": "Header for applications section."
|
||||
},
|
||||
"applicationExplain": {
|
||||
"message": "These applications work with I2P directly to provide them with security and privacy.",
|
||||
"description": "Description for application section."
|
||||
},
|
||||
"windowVisitConsole": {
|
||||
"message": "Router Console: ",
|
||||
"description": "Router Console label."
|
||||
},
|
||||
"routerConsole": {
|
||||
"message": "The entrypoint for all other I2P applications is the I2P Router Console. To visit it, click here.",
|
||||
"description": "Description for the router console."
|
||||
},
|
||||
"windowVisitHomepage": {
|
||||
"message": "Home Page: ",
|
||||
"description": "Home page for the extension label."
|
||||
},
|
||||
"abouthome": {
|
||||
"message": "For more information about this extension, visit this page.",
|
||||
"description": "Description for the extension button page."
|
||||
},
|
||||
"windowVisitHelppage": {
|
||||
"message": "Help Page: ",
|
||||
"description": "Help page for the extension label."
|
||||
},
|
||||
"help": {
|
||||
"message": "For more information about this extension, visit this page.",
|
||||
"description": "Description for the extension button page."
|
||||
},
|
||||
"windowVisitI2ptunnel": {
|
||||
"message": "Hidden Services Manager: ",
|
||||
"description": "Title for i2ptunnel"
|
||||
},
|
||||
"i2ptunnel": {
|
||||
"message": "I2P has a web-based interface for configuring .i2p services like web sites which you can set up.",
|
||||
"description": "Description for i2ptunnel"
|
||||
},
|
||||
"windowVisitSusimail": {
|
||||
"message": "E-Mail: ",
|
||||
"description": "Title for e-mail"
|
||||
},
|
||||
"susimail": {
|
||||
"message": "I2P also bundles a webmail client which can be used to access in-I2P e-mail.",
|
||||
"description": "Description for e-mail"
|
||||
},
|
||||
"windowVisitSnark": {
|
||||
"message": "Bittorrent: ",
|
||||
"description": "Title for Bittorrent"
|
||||
},
|
||||
"snark": {
|
||||
"message": "I2P is capable of anonymous Peer-to-Peer file sharing using the built-in bittorrent application.",
|
||||
"description": "Description for Bittorrent"
|
||||
},
|
||||
"windowVisitSources": {
|
||||
"message": "Extension Source Code: ",
|
||||
"description": "Title for source code link"
|
||||
},
|
||||
"sources": {
|
||||
"message": "Browse the source code here",
|
||||
"description": "Description for the Source code link"
|
||||
},
|
||||
"windowVisitWebPage": {
|
||||
"message": "Extension Home Page: ",
|
||||
"description": "Visit extension homepage on Github"
|
||||
},
|
||||
"homepage": {
|
||||
"message": "More information is available here",
|
||||
"description": "Find more information"
|
||||
},
|
||||
"windowVisitReleases": {
|
||||
"message": "Extension Releases: ",
|
||||
"description": "Visit the release page"
|
||||
},
|
||||
"releases": {
|
||||
"message": "Check for new releases here",
|
||||
"description": "Description for new release page"
|
||||
},
|
||||
"titlePreface": {
|
||||
"message": "I2P Browser",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"titlePrefacePrivate": {
|
||||
"message": "I2P Browser (Private)",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"extensionPreface": {
|
||||
"message": "I2P Management",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"webPreface": {
|
||||
"message": "Web Browser",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"webPrefacePrivate": {
|
||||
"message": "Web Browser (Private)",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"ircPreface": {
|
||||
"message": "Dispatch IRC",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"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": {
|
||||
"message": "Router Console",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"routerPrefacePrivate": {
|
||||
"message": "Router Console (Private)",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"torrentPreface": {
|
||||
"message": "Bittorrent",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"torrentPrefacePrivate": {
|
||||
"message": "Bittorrent (Private)",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"mailPreface": {
|
||||
"message": "Web Mail",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"mailPrefacePrivate": {
|
||||
"message": "Web Mail (Private)",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"i2ptunnelPreface": {
|
||||
"message": "Hidden Services Manager",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"i2ptunnelPrefacePrivate": {
|
||||
"message": "Hidden Services Manager (Private)",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"muwirePreface": {
|
||||
"message": "MuWire",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"muwirePrefacePrivate": {
|
||||
"message": "MuWire (Private)",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"resetMessage": {
|
||||
"message": "Reset Tunnel",
|
||||
"description": "Message for the Reset Tunnel button"
|
||||
},
|
||||
"infoTitle": {
|
||||
"message": "I2P Help",
|
||||
"description": "Title for the help menu"
|
||||
},
|
||||
"infoMessage": {
|
||||
"message": "You are now free to browse the eepWeb! Your browser is now configured to browse anonymously on the I2P network. As you browse, your traffic will be routed through other network nodes to disguise it's origin, both from the server and from the nodes themselves.",
|
||||
"description": "Help Message"
|
||||
},
|
||||
"helpMessage": {
|
||||
"message": "Get additional help",
|
||||
"description": "Help Message"
|
||||
},
|
||||
"newsMessage": {
|
||||
"message": "Visit the I2P Blog to learn the latest about i2p.",
|
||||
"description": "Help Message"
|
||||
},
|
||||
"forumMessage": {
|
||||
"message": "Visit the I2P Forum to learn more or ask for assistance",
|
||||
"description": "Help Message"
|
||||
},
|
||||
"proxyHelpText": {
|
||||
"message": "Configure your I2P proxy here.",
|
||||
"description": "Help for configuring the options for the Reset Tunnel button"
|
||||
},
|
||||
"hostText": {
|
||||
"message": "Host: ",
|
||||
"description": "Host for the HTTP or SOCKS5 Proxy"
|
||||
},
|
||||
"portText": {
|
||||
"message": "Port: ",
|
||||
"description": "Port for the HTTP or SOCKS5 Proxy"
|
||||
},
|
||||
"controlHelpText": {
|
||||
"message": "Configure your router console here.",
|
||||
"description": "Help for configuring the options for the Reset Tunnel button"
|
||||
},
|
||||
"controlHostText": {
|
||||
"message": "Control Host: ",
|
||||
"description": "Host for the Router Console"
|
||||
},
|
||||
"controlPortText": {
|
||||
"message": "Control Port: ",
|
||||
"description": "Port for the Router Console"
|
||||
},
|
||||
"controlHostValue": {
|
||||
"message": "127.0.0.1",
|
||||
"description": "Host for the Router Console"
|
||||
},
|
||||
"controlPortValue": {
|
||||
"message": "7657",
|
||||
"description": "Port for the Router Console"
|
||||
},
|
||||
"isBase32": {
|
||||
"message": "I2P Base32-Formatted Address",
|
||||
"description": "Message for site info panel base32"
|
||||
},
|
||||
"isHostName": {
|
||||
"message": "I2P Jump Hostname",
|
||||
"description": "Message for the site info panel hostname"
|
||||
},
|
||||
"siteLabel": {
|
||||
"message": "Address/Site Information:",
|
||||
"description": "Label for i2p site info"
|
||||
},
|
||||
"certLabel": {
|
||||
"message": "Certificate Information:",
|
||||
"description": "Label for certificate info"
|
||||
},
|
||||
"certAbsent": {
|
||||
"message": "This site is not using HTTPS. It is still verified cryptographically by I2P.",
|
||||
"description": "Content for certificate info if absent"
|
||||
},
|
||||
"certPresent": {
|
||||
"message": "This site is using HTTPS. HTTPS over I2P is experimental and requires self-signed certificates or alternate root authorites.",
|
||||
"description": "Content for certificate info if present"
|
||||
},
|
||||
"protocolHandlerValue": {
|
||||
"message": "http://127.0.0.1:7657/i2psnark/?nofilter_newURL=%s&action=Add&foo=Add+torrent",
|
||||
"description": "Value for the magnet protocol handler"
|
||||
}
|
||||
}
|
||||
"extensionName": {
|
||||
"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."
|
||||
},
|
||||
"toopieTLS": {
|
||||
"message": "Site Properties",
|
||||
"description": "Name of the security panel."
|
||||
},
|
||||
"extensionDescription": {
|
||||
"message": "Your browser is now set up to use I2P.",
|
||||
"description": "Description of the extension."
|
||||
},
|
||||
"extensionVersion": {
|
||||
"message": "1.28",
|
||||
"description": "Version of the extension."
|
||||
},
|
||||
"proxyFailedStatus": {
|
||||
"message": "Proxy is not ready",
|
||||
"description": "Proxy failed status."
|
||||
},
|
||||
"proxySuccessStatus": {
|
||||
"message": "Proxy is ready",
|
||||
"description": "Proxy failed status."
|
||||
},
|
||||
"controlHeader": {
|
||||
"message": "Control",
|
||||
"description": "Headline for control panel."
|
||||
},
|
||||
"controlExplain": {
|
||||
"message": "These controls are used to tailor your I2P Browsing Experience",
|
||||
"description": "Introduce the control panel."
|
||||
},
|
||||
"clearData": {
|
||||
"message": "Clear Browsing Data: ",
|
||||
"description": "Clear Browsing Data menu item."
|
||||
},
|
||||
"clearDesc": {
|
||||
"message": "Use this to erase your I2P browsing data.",
|
||||
"description": "Clear browsing data action description."
|
||||
},
|
||||
"enableWebRTC": {
|
||||
"message": "Enable WebRTC with proxy?",
|
||||
"description": "WebRTC checkbox label."
|
||||
},
|
||||
"rtcDesc": {
|
||||
"message": "WebRTC is disabled by default, but you can turn it back on and force it to honor the proxy. If you are a user of the Snowflake browser extension, this option is disabled and WebRTC is turned on by default.",
|
||||
"description": "WebRTC action description"
|
||||
},
|
||||
"disableHistory": {
|
||||
"message": "Disable History in I2P Tabs?",
|
||||
"description": "History checkbox label."
|
||||
},
|
||||
"histDesc": {
|
||||
"message": "History is automatically cleared when your I2P tabs are closed. If you want to clear history as you go, check this box.",
|
||||
"description": "History action description"
|
||||
},
|
||||
"applicationHeader": {
|
||||
"message": "Applications",
|
||||
"description": "Header for applications section."
|
||||
},
|
||||
"applicationExplain": {
|
||||
"message": "These applications work with I2P directly to provide them with security and privacy.",
|
||||
"description": "Description for application section."
|
||||
},
|
||||
"windowVisitConsole": {
|
||||
"message": "Router Console: ",
|
||||
"description": "Router Console label."
|
||||
},
|
||||
"routerConsole": {
|
||||
"message": "The entrypoint for all other I2P applications is the I2P Router Console. To visit it, click here.",
|
||||
"description": "Description for the router console."
|
||||
},
|
||||
"windowVisitHomepage": {
|
||||
"message": "Home Page: ",
|
||||
"description": "Home page for the extension label."
|
||||
},
|
||||
"abouthome": {
|
||||
"message": "For more information about this extension, visit this page.",
|
||||
"description": "Description for the extension button page."
|
||||
},
|
||||
"windowVisitHelppage": {
|
||||
"message": "Help Page: ",
|
||||
"description": "Help page for the extension label."
|
||||
},
|
||||
"help": {
|
||||
"message": "For more information about this extension, visit this page.",
|
||||
"description": "Description for the extension button page."
|
||||
},
|
||||
"windowVisitI2ptunnel": {
|
||||
"message": "Hidden Services Manager: ",
|
||||
"description": "Title for i2ptunnel"
|
||||
},
|
||||
"i2ptunnel": {
|
||||
"message": "I2P has a web-based interface for configuring .i2p services like web sites which you can set up.",
|
||||
"description": "Description for i2ptunnel"
|
||||
},
|
||||
"windowVisitSusimail": {
|
||||
"message": "E-Mail: ",
|
||||
"description": "Title for e-mail"
|
||||
},
|
||||
"susimail": {
|
||||
"message": "I2P also bundles a webmail client which can be used to access in-I2P e-mail.",
|
||||
"description": "Description for e-mail"
|
||||
},
|
||||
"windowVisitSnark": {
|
||||
"message": "Bittorrent: ",
|
||||
"description": "Title for Bittorrent"
|
||||
},
|
||||
"snark": {
|
||||
"message": "I2P is capable of anonymous Peer-to-Peer file sharing using the built-in bittorrent application.",
|
||||
"description": "Description for Bittorrent"
|
||||
},
|
||||
"windowVisitSources": {
|
||||
"message": "Extension Source Code: ",
|
||||
"description": "Title for source code link"
|
||||
},
|
||||
"sources": {
|
||||
"message": "Browse the source code here",
|
||||
"description": "Description for the Source code link"
|
||||
},
|
||||
"windowVisitWebPage": {
|
||||
"message": "Extension Home Page: ",
|
||||
"description": "Visit extension homepage on Github"
|
||||
},
|
||||
"homepage": {
|
||||
"message": "More information is available here",
|
||||
"description": "Find more information"
|
||||
},
|
||||
"windowVisitReleases": {
|
||||
"message": "Extension Releases: ",
|
||||
"description": "Visit the release page"
|
||||
},
|
||||
"releases": {
|
||||
"message": "Check for new releases here",
|
||||
"description": "Description for new release page"
|
||||
},
|
||||
"titlePreface": {
|
||||
"message": "I2P Browser",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"titlePrefacePrivate": {
|
||||
"message": "I2P Browser (Private)",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"extensionPreface": {
|
||||
"message": "I2P Management",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"torPreface": {
|
||||
"message": "Tor Management",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"reseedPreface": {
|
||||
"message": "Reseed Management",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"webPreface": {
|
||||
"message": "Web Browser",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"webPrefacePrivate": {
|
||||
"message": "Web Browser (Private)",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"ircPreface": {
|
||||
"message": "Dispatch IRC",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"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": {
|
||||
"message": "Router Console",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"routerPrefacePrivate": {
|
||||
"message": "Router Console (Private)",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"torrentPreface": {
|
||||
"message": "Bittorrent",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"torrentPrefacePrivate": {
|
||||
"message": "Bittorrent (Private)",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"mailPreface": {
|
||||
"message": "Web Mail",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"mailPrefacePrivate": {
|
||||
"message": "Web Mail (Private)",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"i2ptunnelPreface": {
|
||||
"message": "Hidden Services Manager",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"i2ptunnelPrefacePrivate": {
|
||||
"message": "Hidden Services Manager (Private)",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"muwirePreface": {
|
||||
"message": "MuWire",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"muwirePrefacePrivate": {
|
||||
"message": "MuWire (Private)",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"resetMessage": {
|
||||
"message": "Reset Tunnel",
|
||||
"description": "Message for the Reset Tunnel button"
|
||||
},
|
||||
"infoTitle": {
|
||||
"message": "I2P Help",
|
||||
"description": "Title for the help menu"
|
||||
},
|
||||
"infoMessage": {
|
||||
"message": "You are now free to browse the eepWeb! Your browser is now configured to browse anonymously on the I2P network. As you browse, your traffic will be routed through other network nodes to disguise it's origin, both from the server and from the nodes themselves.",
|
||||
"description": "Help Message"
|
||||
},
|
||||
"helpMessage": {
|
||||
"message": "Get additional help",
|
||||
"description": "Help Message"
|
||||
},
|
||||
"newsMessage": {
|
||||
"message": "Visit the I2P Blog to learn the latest about i2p.",
|
||||
"description": "Help Message"
|
||||
},
|
||||
"forumMessage": {
|
||||
"message": "Visit the I2P Forum to learn more or ask for assistance",
|
||||
"description": "Help Message"
|
||||
},
|
||||
"proxyHelpText": {
|
||||
"message": "Configure your I2P proxy here.",
|
||||
"description": "Help for configuring the options for the Reset Tunnel button"
|
||||
},
|
||||
"hostText": {
|
||||
"message": "Host: ",
|
||||
"description": "Host for the HTTP or SOCKS5 Proxy"
|
||||
},
|
||||
"portText": {
|
||||
"message": "Port: ",
|
||||
"description": "Port for the HTTP or SOCKS5 Proxy"
|
||||
},
|
||||
"controlHelpText": {
|
||||
"message": "Configure your router console here.",
|
||||
"description": "Help for configuring the options for the Reset Tunnel button"
|
||||
},
|
||||
"controlHostText": {
|
||||
"message": "Control Host: ",
|
||||
"description": "Host for the Router Console"
|
||||
},
|
||||
"controlPortText": {
|
||||
"message": "Control Port: ",
|
||||
"description": "Port for the Router Console"
|
||||
},
|
||||
"controlHostValue": {
|
||||
"message": "127.0.0.1",
|
||||
"description": "Host for the Router Console"
|
||||
},
|
||||
"controlPortValue": {
|
||||
"message": "7657",
|
||||
"description": "Port for the Router Console"
|
||||
},
|
||||
"isBase32": {
|
||||
"message": "I2P Base32-Formatted Address",
|
||||
"description": "Message for site info panel base32"
|
||||
},
|
||||
"isHostName": {
|
||||
"message": "I2P Jump Hostname",
|
||||
"description": "Message for the site info panel hostname"
|
||||
},
|
||||
"siteLabel": {
|
||||
"message": "Address/Site Information:",
|
||||
"description": "Label for i2p site info"
|
||||
},
|
||||
"certLabel": {
|
||||
"message": "Certificate Information:",
|
||||
"description": "Label for certificate info"
|
||||
},
|
||||
"certAbsent": {
|
||||
"message": "This site is not using HTTPS. It is still verified cryptographically by I2P.",
|
||||
"description": "Content for certificate info if absent"
|
||||
},
|
||||
"certPresent": {
|
||||
"message": "This site is using HTTPS. HTTPS over I2P is experimental and requires self-signed certificates or alternate root authorites.",
|
||||
"description": "Content for certificate info if present"
|
||||
},
|
||||
"protocolHandlerValue": {
|
||||
"message": "http://127.0.0.1:7657/i2psnark/?nofilter_newURL=%s&action=Add&foo=Add+torrent",
|
||||
"description": "Value for the magnet protocol handler"
|
||||
}
|
||||
}
|
@ -1,314 +1,322 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
}
|
||||
"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": "1.28",
|
||||
"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"
|
||||
},
|
||||
"torPreface": {
|
||||
"message": "Tor Management",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"reseedPreface": {
|
||||
"message": "Reseed Management",
|
||||
"description": "Preface for the browser titlebar"
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
796
background.js
796
background.js
@ -1,464 +1,494 @@
|
||||
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");
|
||||
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');
|
||||
var torpref = chrome.i18n.getMessage('torPreface');
|
||||
var reseedpref = chrome.i18n.getMessage('reseedPreface');
|
||||
|
||||
function onError(err) {
|
||||
console.log("(background)", err);
|
||||
console.log('(background)', err);
|
||||
}
|
||||
|
||||
function onContextGotLog(contexts) {
|
||||
if (contexts != null) {
|
||||
console.log(contexts);
|
||||
}
|
||||
if (contexts != null) {
|
||||
console.log(contexts);
|
||||
}
|
||||
}
|
||||
|
||||
function onContextsGot(contexts) {
|
||||
var ids = [];
|
||||
for (let context of contexts) {
|
||||
console.log(`Name : ${context.name}`);
|
||||
ids.push(context.name);
|
||||
}
|
||||
console.log("Checking new contexts");
|
||||
if (ids.indexOf(titlepref) == -1) {
|
||||
browser.contextualIdentities
|
||||
.create({
|
||||
name: titlepref,
|
||||
color: "orange",
|
||||
icon: "fingerprint",
|
||||
})
|
||||
.then(onCreated, onNotCreated);
|
||||
}
|
||||
if (ids.indexOf(blogpref) == -1) {
|
||||
browser.contextualIdentities
|
||||
.create({
|
||||
name: blogpref,
|
||||
color: "pink",
|
||||
icon: "pet",
|
||||
})
|
||||
.then(onCreated, onNotCreated);
|
||||
}
|
||||
if (ids.indexOf(webpref) == -1) {
|
||||
browser.contextualIdentities
|
||||
.create({
|
||||
name: webpref,
|
||||
color: "red",
|
||||
icon: "circle",
|
||||
})
|
||||
.then(onCreated, onNotCreated);
|
||||
}
|
||||
if (ids.indexOf(routerpref) == -1) {
|
||||
browser.contextualIdentities
|
||||
.create({
|
||||
name: routerpref,
|
||||
color: "blue",
|
||||
icon: "briefcase",
|
||||
})
|
||||
.then(onCreated, onNotCreated);
|
||||
}
|
||||
if (ids.indexOf(tunnelpref) == -1) {
|
||||
browser.contextualIdentities
|
||||
.create({
|
||||
name: tunnelpref,
|
||||
color: "green",
|
||||
icon: "tree",
|
||||
})
|
||||
.then(onCreated, onNotCreated);
|
||||
}
|
||||
if (ids.indexOf(mailpref) == -1) {
|
||||
browser.contextualIdentities
|
||||
.create({
|
||||
name: mailpref,
|
||||
color: "yellow",
|
||||
icon: "briefcase",
|
||||
})
|
||||
.then(onCreated, onNotCreated);
|
||||
}
|
||||
if (ids.indexOf(torrentpref) == -1) {
|
||||
browser.contextualIdentities
|
||||
.create({
|
||||
name: torrentpref,
|
||||
color: "purple",
|
||||
icon: "chill",
|
||||
})
|
||||
.then(onCreated, onNotCreated);
|
||||
}
|
||||
if (ids.indexOf(ircpref) == -1) {
|
||||
browser.contextualIdentities
|
||||
.create({
|
||||
name: ircpref,
|
||||
color: "red",
|
||||
icon: "vacation",
|
||||
})
|
||||
.then(onCreated, onNotCreated);
|
||||
}
|
||||
if (ids.indexOf(muwirepref) == -1) {
|
||||
browser.contextualIdentities
|
||||
.create({
|
||||
name: muwirepref,
|
||||
color: "turquoise",
|
||||
icon: "gift",
|
||||
})
|
||||
.then(onCreated, onNotCreated);
|
||||
}
|
||||
if (ids.indexOf(botepref) == -1) {
|
||||
browser.contextualIdentities
|
||||
.create({
|
||||
name: botepref,
|
||||
color: "blue",
|
||||
icon: "fence",
|
||||
})
|
||||
.then(onCreated, onNotCreated);
|
||||
}
|
||||
var ids = [];
|
||||
for (let context of contexts) {
|
||||
console.log(`Name : ${context.name}`);
|
||||
ids.push(context.name);
|
||||
}
|
||||
console.log('Checking new contexts');
|
||||
if (ids.indexOf(titlepref) == -1) {
|
||||
browser.contextualIdentities
|
||||
.create({
|
||||
name: titlepref,
|
||||
color: 'orange',
|
||||
icon: 'fingerprint'
|
||||
})
|
||||
.then(onCreated, onNotCreated);
|
||||
}
|
||||
if (ids.indexOf(blogpref) == -1) {
|
||||
browser.contextualIdentities
|
||||
.create({
|
||||
name: blogpref,
|
||||
color: 'pink',
|
||||
icon: 'pet'
|
||||
})
|
||||
.then(onCreated, onNotCreated);
|
||||
}
|
||||
if (ids.indexOf(webpref) == -1) {
|
||||
browser.contextualIdentities
|
||||
.create({
|
||||
name: webpref,
|
||||
color: 'red',
|
||||
icon: 'circle'
|
||||
})
|
||||
.then(onCreated, onNotCreated);
|
||||
}
|
||||
if (ids.indexOf(routerpref) == -1) {
|
||||
browser.contextualIdentities
|
||||
.create({
|
||||
name: routerpref,
|
||||
color: 'blue',
|
||||
icon: 'briefcase'
|
||||
})
|
||||
.then(onCreated, onNotCreated);
|
||||
}
|
||||
if (ids.indexOf(tunnelpref) == -1) {
|
||||
browser.contextualIdentities
|
||||
.create({
|
||||
name: tunnelpref,
|
||||
color: 'green',
|
||||
icon: 'tree'
|
||||
})
|
||||
.then(onCreated, onNotCreated);
|
||||
}
|
||||
if (ids.indexOf(mailpref) == -1) {
|
||||
browser.contextualIdentities
|
||||
.create({
|
||||
name: mailpref,
|
||||
color: 'yellow',
|
||||
icon: 'briefcase'
|
||||
})
|
||||
.then(onCreated, onNotCreated);
|
||||
}
|
||||
if (ids.indexOf(torrentpref) == -1) {
|
||||
browser.contextualIdentities
|
||||
.create({
|
||||
name: torrentpref,
|
||||
color: 'purple',
|
||||
icon: 'chill'
|
||||
})
|
||||
.then(onCreated, onNotCreated);
|
||||
}
|
||||
if (ids.indexOf(ircpref) == -1) {
|
||||
browser.contextualIdentities
|
||||
.create({
|
||||
name: ircpref,
|
||||
color: 'red',
|
||||
icon: 'vacation'
|
||||
})
|
||||
.then(onCreated, onNotCreated);
|
||||
}
|
||||
if (ids.indexOf(muwirepref) == -1) {
|
||||
browser.contextualIdentities
|
||||
.create({
|
||||
name: muwirepref,
|
||||
color: 'turquoise',
|
||||
icon: 'gift'
|
||||
})
|
||||
.then(onCreated, onNotCreated);
|
||||
}
|
||||
if (ids.indexOf(botepref) == -1) {
|
||||
browser.contextualIdentities
|
||||
.create({
|
||||
name: botepref,
|
||||
color: 'blue',
|
||||
icon: 'fence'
|
||||
})
|
||||
.then(onCreated, onNotCreated);
|
||||
}
|
||||
if (ids.indexOf(torpref) == -1) {
|
||||
browser.contextualIdentities
|
||||
.create({
|
||||
name: torpref,
|
||||
color: 'purple',
|
||||
icon: 'food'
|
||||
})
|
||||
.then(onCreated, onNotCreated);
|
||||
}
|
||||
if (ids.indexOf(reseedpref) == -1) {
|
||||
browser.contextualIdentities
|
||||
.create({
|
||||
name: reseedpref,
|
||||
color: 'green',
|
||||
icon: 'briefcase'
|
||||
})
|
||||
.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") {
|
||||
browser.windows.onCreated.addListener(themeWindow);
|
||||
browser.windows.onFocusChanged.addListener(themeWindow);
|
||||
browser.windows.onRemoved.addListener(themeWindow);
|
||||
browser.tabs.onUpdated.addListener(themeWindowByTab);
|
||||
browser.tabs.onActivated.addListener(themeWindowByTab);
|
||||
}
|
||||
if (got.os != 'android') {
|
||||
browser.windows.onCreated.addListener(themeWindow);
|
||||
browser.windows.onFocusChanged.addListener(themeWindow);
|
||||
browser.windows.onRemoved.addListener(themeWindow);
|
||||
browser.tabs.onUpdated.addListener(themeWindowByTab);
|
||||
browser.tabs.onActivated.addListener(themeWindowByTab);
|
||||
}
|
||||
});
|
||||
|
||||
function themeWindowByTab(tabId) {
|
||||
function tabWindow(tab) {
|
||||
var gettingPlatformInfo = browser.runtime.getPlatformInfo();
|
||||
gettingPlatformInfo.then((got) => {
|
||||
if (got.os == "android") {
|
||||
let getwindow = browser.tabs.get(tab.tabId);
|
||||
getwindow.then(themeWindow);
|
||||
} else {
|
||||
let getwindow = browser.windows.get(tab.windowId);
|
||||
getwindow.then(themeWindow);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (typeof tabId === "number") {
|
||||
let tab = browser.tabs.get(tabId);
|
||||
tab.then(tabWindow);
|
||||
} else {
|
||||
tabWindow(tabId);
|
||||
}
|
||||
function tabWindow(tab) {
|
||||
var gettingPlatformInfo = browser.runtime.getPlatformInfo();
|
||||
gettingPlatformInfo.then((got) => {
|
||||
if (got.os == 'android') {
|
||||
let getwindow = browser.tabs.get(tab.tabId);
|
||||
getwindow.then(themeWindow);
|
||||
} else {
|
||||
let getwindow = browser.windows.get(tab.windowId);
|
||||
getwindow.then(themeWindow);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (typeof tabId === 'number') {
|
||||
let tab = browser.tabs.get(tabId);
|
||||
tab.then(tabWindow);
|
||||
} else {
|
||||
tabWindow(tabId);
|
||||
}
|
||||
}
|
||||
|
||||
function isEmpty(obj) {
|
||||
if (obj === undefined || obj === null) {
|
||||
return true;
|
||||
}
|
||||
for (var key in obj) {
|
||||
if (obj.hasOwnProperty(key)) {
|
||||
return false;
|
||||
if (obj === undefined || obj === null) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
for (var key in obj) {
|
||||
if (obj.hasOwnProperty(key)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
let btheme = {
|
||||
colors: {
|
||||
frame: "#363A68",
|
||||
toolbar: "#363A68",
|
||||
},
|
||||
colors: {
|
||||
frame: '#363A68',
|
||||
toolbar: '#363A68',
|
||||
tab_text: '#ECF3FF'
|
||||
}
|
||||
};
|
||||
|
||||
let dtheme = {
|
||||
colors: {
|
||||
frame: "#4456B7",
|
||||
toolbar: "#4456B7",
|
||||
},
|
||||
colors: {
|
||||
frame: '#4456B7',
|
||||
toolbar: '#4456B7',
|
||||
tab_text: '#ECF3FF'
|
||||
}
|
||||
};
|
||||
|
||||
function themeWindow(window) {
|
||||
// Check if the window is in private browsing
|
||||
function onThemeError() {
|
||||
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) {
|
||||
// Check if the window is in private browsing
|
||||
function onThemeError() {
|
||||
console.log('(theme) color set error');
|
||||
browserTheme();
|
||||
browser.pageAction.show(tabInfo[0].id);
|
||||
} else if (context.name == routerpref) {
|
||||
console.log("(theme) Active in Router Console window");
|
||||
dynamicTheme();
|
||||
} else if (context.name == tunnelpref) {
|
||||
console.log("(theme) Active in Hidden Services Manager window");
|
||||
dynamicTheme();
|
||||
} else if (context.name == mailpref) {
|
||||
console.log("(theme) Active in Web Mail window");
|
||||
dynamicTheme();
|
||||
} else if (context.name == torrentpref) {
|
||||
console.log("(theme) Active in Bittorrent window");
|
||||
dynamicTheme();
|
||||
} else if (context.name == botepref) {
|
||||
console.log("(theme) Active in Bote window");
|
||||
dynamicTheme();
|
||||
} else if (context.name == ircpref) {
|
||||
console.log("(theme) Active in IRC window");
|
||||
dynamicTheme();
|
||||
} else if (context.name == 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"
|
||||
) {
|
||||
browser.contextualIdentities
|
||||
.get(tabInfo[0].cookieStoreId)
|
||||
.then(onContextGotTheme, onThemeError);
|
||||
} else {
|
||||
console.log("(theme) Not active in I2P window");
|
||||
browser.theme.reset();
|
||||
}
|
||||
}
|
||||
|
||||
var querying = browser.tabs.query({
|
||||
currentWindow: true,
|
||||
active: true,
|
||||
});
|
||||
querying.then(logTabs, onThemeError);
|
||||
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() {
|
||||
console.log('(theme)Resetting theme window');
|
||||
browser.theme.reset(window.id);
|
||||
}
|
||||
|
||||
function logTabs(tabInfo) {
|
||||
function onContextGotTheme(context) {
|
||||
if (context.name == titlepref) {
|
||||
browserTheme();
|
||||
browser.pageAction.show(tabInfo[0].id);
|
||||
} else if (context.name == routerpref) {
|
||||
console.log('(theme) Active in Router Console window');
|
||||
dynamicTheme();
|
||||
} else if (context.name == tunnelpref) {
|
||||
console.log('(theme) Active in Hidden Services Manager window');
|
||||
dynamicTheme();
|
||||
} else if (context.name == mailpref) {
|
||||
console.log('(theme) Active in Web Mail window');
|
||||
dynamicTheme();
|
||||
} else if (context.name == torrentpref) {
|
||||
console.log('(theme) Active in Bittorrent window');
|
||||
dynamicTheme();
|
||||
} else if (context.name == botepref) {
|
||||
console.log('(theme) Active in Bote window');
|
||||
dynamicTheme();
|
||||
} else if (context.name == ircpref) {
|
||||
console.log('(theme) Active in IRC window');
|
||||
dynamicTheme();
|
||||
} else if (context.name == blogpref) {
|
||||
console.log('(theme) (theme) Active in Blog window');
|
||||
dynamicTheme();
|
||||
} else if (context.name == muwirepref) {
|
||||
console.log('(theme) Active in MuWire window');
|
||||
dynamicTheme();
|
||||
} else {
|
||||
console.log('(theme) Not active in I2P Window');
|
||||
unsetTheme();
|
||||
}
|
||||
}
|
||||
if (
|
||||
tabInfo[0].cookieStoreId != 'firefox-default' &&
|
||||
tabInfo[0].cookieStoreId != 'firefox-private'
|
||||
) {
|
||||
browser.contextualIdentities
|
||||
.get(tabInfo[0].cookieStoreId)
|
||||
.then(onContextGotTheme, onThemeError);
|
||||
} else {
|
||||
console.log('(theme) Not active in I2P window');
|
||||
unsetTheme();
|
||||
}
|
||||
}
|
||||
|
||||
var querying = browser.tabs.query({
|
||||
currentWindow: true,
|
||||
active: true
|
||||
});
|
||||
querying.then(logTabs, onThemeError);
|
||||
}
|
||||
|
||||
function setTitle(window) {
|
||||
// Check if the window is in private browsing
|
||||
function onContextError() {
|
||||
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");
|
||||
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");
|
||||
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");
|
||||
setTitle(tunnelpref, tunnelprefpriv);
|
||||
} else if (context.name == 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");
|
||||
setTitle(torrentpref, torrentprefpriv);
|
||||
} else if (context.name == ircpref) {
|
||||
console.log("Active in IRC window");
|
||||
setTitle(ircpref, ircprefpriv);
|
||||
}
|
||||
// Check if the window is in private browsing
|
||||
function onContextError() {
|
||||
console.log('Context Error');
|
||||
}
|
||||
|
||||
if (
|
||||
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: "",
|
||||
});
|
||||
} else {
|
||||
browser.windows.update(window.id, {
|
||||
titlePreface: "",
|
||||
});
|
||||
function setTitle(title, privtitle) {
|
||||
if (window.incognito) {
|
||||
browser.windows.update(window.id, {
|
||||
titlePreface: privtitle + ': '
|
||||
});
|
||||
} else {
|
||||
browser.windows.update(window.id, {
|
||||
titlePreface: title + ': '
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var querying = browser.tabs.query({
|
||||
currentWindow: true,
|
||||
active: true,
|
||||
});
|
||||
querying.then(logTabs, onContextError);
|
||||
function logTabs(tabInfo) {
|
||||
function onContextGotTitle(context) {
|
||||
if (context.name == titlepref) {
|
||||
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');
|
||||
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');
|
||||
setTitle(tunnelpref, tunnelprefpriv);
|
||||
} else if (context.name == 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');
|
||||
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'
|
||||
) {
|
||||
browser.contextualIdentities
|
||||
.get(tabInfo[0].cookieStoreId)
|
||||
.then(onContextGotTitle, onContextError);
|
||||
} else if (window.incognito) {
|
||||
browser.windows.update(window.id, {
|
||||
titlePreface: ''
|
||||
});
|
||||
} else {
|
||||
browser.windows.update(window.id, {
|
||||
titlePreface: ''
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
var querying = browser.tabs.query({
|
||||
currentWindow: true,
|
||||
active: true
|
||||
});
|
||||
querying.then(logTabs, onContextError);
|
||||
}
|
||||
|
||||
var gettingListenerInfo = browser.runtime.getPlatformInfo();
|
||||
gettingListenerInfo.then((got) => {
|
||||
function onPlatformError() {
|
||||
console.log("Error finding platform info");
|
||||
}
|
||||
if (got.os != "android") {
|
||||
browser.tabs.onCreated.addListener(() => {
|
||||
var getting = browser.windows.getCurrent({
|
||||
populate: true,
|
||||
});
|
||||
getting.then(setTitle, onPlatformError);
|
||||
});
|
||||
browser.tabs.onActivated.addListener(() => {
|
||||
var getting = browser.windows.getCurrent({
|
||||
populate: true,
|
||||
});
|
||||
getting.then(setTitle, onPlatformError);
|
||||
});
|
||||
}
|
||||
function onPlatformError() {
|
||||
console.log('Error finding platform info');
|
||||
}
|
||||
if (got.os != 'android') {
|
||||
browser.tabs.onCreated.addListener(() => {
|
||||
var getting = browser.windows.getCurrent({
|
||||
populate: true
|
||||
});
|
||||
getting.then(setTitle, onPlatformError);
|
||||
});
|
||||
browser.tabs.onActivated.addListener(() => {
|
||||
var getting = browser.windows.getCurrent({
|
||||
populate: true
|
||||
});
|
||||
getting.then(setTitle, onPlatformError);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
function handleClick() {
|
||||
console.log("Opening page action");
|
||||
browser.pageAction.openPopup();
|
||||
console.log("Opening page action");
|
||||
browser.pageAction.openPopup();
|
||||
}
|
||||
browser.pageAction.onClicked.addListener(handleClick);
|
||||
|
||||
async function certCheck(details) {
|
||||
if (details.url.startsWith("https")) {
|
||||
console.log("(cert) https site", details.url);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!details.url.includes(".i2p")) {
|
||||
return;
|
||||
}
|
||||
|
||||
var tabs = await browser.tabs.query({ active: true });
|
||||
|
||||
if (tabs == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
console.log("(cert) checking cert", tabs);
|
||||
|
||||
for (tab in tabs) {
|
||||
if (details.url == tabs[tab].url) {
|
||||
console.log("(cert) right tab", tabs[tab].id);
|
||||
try {
|
||||
let securityInfo = await browser.webRequest.getSecurityInfo(
|
||||
details.requestId,
|
||||
{ certificateChain: true }
|
||||
);
|
||||
console.log("(cert) state is complete", securityInfo);
|
||||
console.log("(cert) certificates", securityInfo.certificates);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
if (details.url.startsWith("https")) {
|
||||
console.log("(cert) https site", details.url);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!details.url.includes(".i2p")) {
|
||||
return;
|
||||
}
|
||||
|
||||
var tabs = await browser.tabs.query({ active: true });
|
||||
|
||||
if (tabs == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
console.log("(cert) checking cert", tabs);
|
||||
|
||||
for (tab in tabs) {
|
||||
if (details.url == tabs[tab].url) {
|
||||
console.log("(cert) right tab", tabs[tab].id);
|
||||
try {
|
||||
let securityInfo = await browser.webRequest.getSecurityInfo(
|
||||
details.requestId, { certificateChain: true }
|
||||
);
|
||||
console.log("(cert) state is complete", securityInfo);
|
||||
console.log("(cert) certificates", securityInfo.certificates);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Listen for onHeaderReceived for the target page.
|
||||
// Set "blocking" and "responseHeaders".
|
||||
browser.webRequest.onHeadersReceived.addListener(
|
||||
certCheck,
|
||||
{ urls: ["<all_urls>"] },
|
||||
["blocking", "responseHeaders"]
|
||||
certCheck, { 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 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);
|
||||
}
|
||||
}
|
||||
var tabs = browser.tabs.query({ cookieStoreId: context.cookieStoreId });
|
||||
tabs.then(conditionallyDelete, onError);
|
||||
}
|
||||
}
|
||||
getContext.then(checkTabs, 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 getContext = browser.contextualIdentities.query({ name: titlepref });
|
||||
|
||||
function checkTabs(ctx) {
|
||||
for (let context in ctx) {
|
||||
function conditionallyDelete(tabs) {
|
||||
if (tabs.length == 0 && context != 0) {
|
||||
console.log(context);
|
||||
browser.contextualIdentities.remove(context.cookieStoreId);
|
||||
}
|
||||
}
|
||||
var tabs = browser.tabs.query({ cookieStoreId: context.cookieStoreId });
|
||||
tabs.then(conditionallyDelete, onError);
|
||||
}
|
||||
}
|
||||
var tabs = browser.tabs.query({ cookieStoreId: context.cookieStoreId });
|
||||
tabs.then(conditionallyDelete, onError);
|
||||
}
|
||||
}
|
||||
getContext.then(checkTabs, onError);
|
||||
getContext.then(checkTabs, onError);
|
||||
}
|
||||
|
||||
onOpenedWindowCheck();
|
||||
|
||||
browser.tabs.onRemoved.addListener(onClosedWindowCheck);
|
||||
browser.windows.onRemoved.addListener(onClosedWindowCheck);
|
||||
browser.windows.onCreated.addListener(onOpenedWindowCheck);
|
||||
|
||||
if (browser.windows != undefined) {
|
||||
console.log("windows unavailable on android", browser.runtime.PlatformOs);
|
||||
browser.windows.onRemoved.addListener(onClosedWindowCheck);
|
||||
browser.windows.onCreated.addListener(onOpenedWindowCheck);
|
||||
}
|
134
bookmarks.js
134
bookmarks.js
@ -1,30 +1,30 @@
|
||||
function bookmarksSetup() {
|
||||
var gettingInfo = browser.runtime.getPlatformInfo();
|
||||
gettingInfo.then((got) => {
|
||||
if (got.os != "android") {
|
||||
if (got.os != 'android') {
|
||||
function bookmarks(bookmarkToolbar) {
|
||||
console.log("(bookmarks)", bookmarkToolbar);
|
||||
console.log("Setting up bookmark toolbar", 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 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,
|
||||
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,
|
||||
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"
|
||||
@ -36,20 +36,20 @@ function bookmarksSetup() {
|
||||
function bookTorrent(bookmarkItems) {
|
||||
if (!bookmarkItems.length) {
|
||||
function gotProxyInfo(info) {
|
||||
let port = info.value.http.split(":")[1];
|
||||
if (port == "7644") {
|
||||
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,
|
||||
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,
|
||||
'http://' + control_host + ':' + control_port + '/i2psnark',
|
||||
title: 'Bittorrent',
|
||||
parentId: bookmarkToolbar[0].id
|
||||
});
|
||||
createRhizomeBookmark.then(onCreated);
|
||||
}
|
||||
@ -64,19 +64,19 @@ function bookmarksSetup() {
|
||||
function bookConsole(bookmarkItems) {
|
||||
if (!bookmarkItems.length) {
|
||||
function gotProxyInfo(info) {
|
||||
let port = info.value.http.split(":")[1];
|
||||
if (port == "7644") {
|
||||
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,
|
||||
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,
|
||||
url: 'http://' + control_host + ':' + control_port + '/home',
|
||||
title: 'I2P Console',
|
||||
parentId: bookmarkToolbar[0].id
|
||||
});
|
||||
createRhizomeBookmark.then(onCreated);
|
||||
}
|
||||
@ -91,24 +91,24 @@ function bookmarksSetup() {
|
||||
function bookMail(bookmarkItems) {
|
||||
if (!bookmarkItems.length) {
|
||||
function gotProxyInfo(info) {
|
||||
let port = info.value.http.split(":")[1];
|
||||
if (port == "7644") {
|
||||
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,
|
||||
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,
|
||||
'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"
|
||||
@ -120,28 +120,28 @@ function bookmarksSetup() {
|
||||
function bookI2PTunnel(bookmarkItems) {
|
||||
if (!bookmarkItems.length) {
|
||||
function gotProxyInfo(info) {
|
||||
let port = info.value.http.split(":")[1];
|
||||
if (port == "7644") {
|
||||
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,
|
||||
url: 'http://localhost:7657/i2ptunnel',
|
||||
title: 'Hidden Services Manager',
|
||||
parentId: bookmarkToolbar[0].id
|
||||
});
|
||||
createBookmark.then(onCreated);
|
||||
} else {
|
||||
var createRhizomeBookmark = browser.bookmarks.create({
|
||||
url:
|
||||
"http://" +
|
||||
'http://' +
|
||||
control_host +
|
||||
":" +
|
||||
':' +
|
||||
control_port +
|
||||
"/i2ptunnel",
|
||||
title: "Hidden Services Manager",
|
||||
parentId: bookmarkToolbar[0].id,
|
||||
'/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"
|
||||
@ -155,54 +155,54 @@ function bookmarksSetup() {
|
||||
console.log(`An error : ${error}`);
|
||||
}
|
||||
function onCreated(node) {
|
||||
console.log("Bookmarked", node);
|
||||
console.log('Bookmarked', node);
|
||||
}
|
||||
|
||||
var b0 = browser.bookmarks.search({
|
||||
title: "I2P Extension Home Page",
|
||||
title: 'I2P Extension Home Page'
|
||||
});
|
||||
b0.then(bookHome, onRejected);
|
||||
|
||||
var b1 = browser.bookmarks.search({
|
||||
title: "Bittorrent",
|
||||
title: 'Bittorrent'
|
||||
});
|
||||
b1.then(bookTorrent, onRejected);
|
||||
|
||||
var b2 = browser.bookmarks.search({
|
||||
title: "Hidden Services Manager",
|
||||
title: 'Hidden Services Manager'
|
||||
});
|
||||
b2.then(bookI2PTunnel, onRejected);
|
||||
|
||||
var b3 = browser.bookmarks.search({
|
||||
title: "Web Mail",
|
||||
title: 'Web Mail'
|
||||
});
|
||||
b3.then(bookMail, onRejected);
|
||||
|
||||
var b4 = browser.bookmarks.search({
|
||||
title: "I2P Console",
|
||||
title: 'I2P Console'
|
||||
});
|
||||
b4.then(bookConsole, onRejected);
|
||||
defaultSettings["bookmarks_state"] = true;
|
||||
defaultSettings['bookmarks_state'] = true;
|
||||
}
|
||||
|
||||
var bt = browser.bookmarks.search({
|
||||
query: "Toolbar",
|
||||
query: 'Toolbar'
|
||||
});
|
||||
|
||||
function toolDir(bookmarkToolbar) {
|
||||
let defaultSettings = {};
|
||||
chrome.storage.local.set(defaultSettings);
|
||||
console.log("(bookmarks) created");
|
||||
var ibbt = browser.bookmarks.search("I2P Toolbar");
|
||||
console.log('(bookmarks) created');
|
||||
var ibbt = browser.bookmarks.search('I2P Toolbar');
|
||||
function setupDir(ibbt) {
|
||||
function onToolbarCreated(node) {
|
||||
var ibt = browser.bookmarks.search("I2P Toolbar");
|
||||
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,
|
||||
title: 'I2P Toolbar',
|
||||
parentId: bookmarkToolbar[0].id
|
||||
});
|
||||
createBookmark.then(onToolbarCreated);
|
||||
}
|
||||
@ -225,7 +225,7 @@ function bookmarksSetup() {
|
||||
}
|
||||
|
||||
function conditionalBookmarksSetup(obj) {
|
||||
console.log("(bookmarks) state", obj.bookmarks_state);
|
||||
console.log('(bookmarks) state', obj.bookmarks_state);
|
||||
if (obj.bookmarks_state == false) {
|
||||
bookmarksSetup();
|
||||
}
|
||||
@ -235,11 +235,13 @@ function conditionalBookmarksSetup(obj) {
|
||||
}
|
||||
|
||||
if (browser != null) {
|
||||
let gettingStorage = browser.storage.local.get("bookmarks_state");
|
||||
gettingStorage.then(conditionalBookmarksSetup, bookmarksSetup);
|
||||
if (browser.windows != undefined) {
|
||||
let gettingStorage = browser.storage.local.get('bookmarks_state');
|
||||
gettingStorage.then(conditionalBookmarksSetup, bookmarksSetup);
|
||||
}
|
||||
}
|
||||
|
||||
const bookmarksButton = document.getElementById("bookmarksButton");
|
||||
const bookmarksButton = document.getElementById('bookmarksButton');
|
||||
if (bookmarksButton != null) {
|
||||
bookmarksButton.addEventListener("click", bookmarksSetup);
|
||||
bookmarksButton.addEventListener('click', bookmarksSetup);
|
||||
}
|
||||
|
28
cert.js
28
cert.js
@ -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");
|
||||
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);
|
||||
console.log('Updating cert information', response);
|
||||
});
|
||||
} else {
|
||||
contentUpdateById("AddressCertInfo", "certAbsent");
|
||||
|
26
config.js
26
config.js
@ -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;
|
||||
|
75
content.js
75
content.js
@ -2,54 +2,59 @@ 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');
|
||||
|
||||
// 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) => {
|
||||
contentUpdateById("proxy-check", "proxySuccessStatus");
|
||||
fetch('http://proxy.i2p').then((myJson) => {
|
||||
contentUpdateById('proxy-check', 'proxySuccessStatus');
|
||||
let readyness = document.querySelectorAll('.readyness');
|
||||
if (readyness != null) {
|
||||
hide(readyness);
|
||||
}
|
||||
}, (error) => {
|
||||
contentUpdateById("proxy-check", "proxyFailedStatus");
|
||||
let readyness = document.querySelectorAll(".readyness");
|
||||
if (readyness != null) {
|
||||
hide(readyness);
|
||||
|
14
context.js
14
context.js
@ -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,20 +10,20 @@ 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));
|
||||
|
63
debian/changelog
vendored
63
debian/changelog
vendored
@ -1,9 +1,70 @@
|
||||
i2psetproxy.js (0.125-1) UNRELEASED; urgency=low
|
||||
|
||||
* Bump and resubmit to mozilla.
|
||||
|
||||
-- idk <hankhill19580@gmail.com> Wed, 3 Nov 2021 00:20:33 -0400
|
||||
|
||||
i2psetproxy.js (0.123-1) UNRELEASED; urgency=low
|
||||
|
||||
* Bump and resubmit to mozilla.
|
||||
* I am not going to optionally keep cookies.
|
||||
* That would be introducing a pointless security issue.
|
||||
|
||||
-- idk <hankhill19580@gmail.com> Wed, 30 Oct 2021 10:11:51 -0400
|
||||
|
||||
i2psetproxy.js (0.121-1) UNRELEASED; urgency=low
|
||||
|
||||
* switch to browser_specific_settings manifest key
|
||||
|
||||
-- idk <hankhill19580@gmail.com> Wed, 13 Oct 2021 21:28:28 -0400
|
||||
|
||||
i2psetproxy.js (0.119-1) UNRELEASED; urgency=low
|
||||
|
||||
* Fixes to ease releasing via AMO
|
||||
|
||||
-- idk <hankhill19580@gmail.com> Wed, 13 Oct 2021 20:37:30 -0400
|
||||
|
||||
i2psetproxy.js (0.117-1) UNRELEASED; urgency=low
|
||||
|
||||
* Switch to legwork for search provider.
|
||||
* admin isn't answering, but the service is up unlike yacy.idk.i2p.
|
||||
|
||||
-- idk <hankhill19580@gmail.com> Mon, 4 Oct 2021 20:38:59 -0400
|
||||
|
||||
i2psetproxy.js (0.115-1) UNRELEASED; urgency=low
|
||||
|
||||
* Improve functionality of X-I2P-Location and X-I2P-Torrentlocation
|
||||
* Fix usage of browser.theme.reset()
|
||||
* Add checks to disable features that are broken on Android
|
||||
|
||||
-- idk <hankhill19580@gmail.com> Fri, 1 Oct 2021 15:29:22 -0400
|
||||
|
||||
i2psetproxy.js (0.113-1) UNRELEASED; urgency=low
|
||||
|
||||
* Fix checks on BRB, railroad containers
|
||||
|
||||
-- idk <hankhill19580@gmail.com> Sun, 26 Sep 2021 00:37:22 -0400
|
||||
|
||||
i2psetproxy.js (0.111-1) UNRELEASED; urgency=low
|
||||
|
||||
* simplify background theme issue fix
|
||||
|
||||
-- idk <hankhill19580@gmail.com> Wed, 07 Jul 2021 23:27:27 -0400
|
||||
|
||||
i2psetproxy.js (0.109-1) UNRELEASED; urgency=low
|
||||
|
||||
* connection interrupted mid release, retry failed validation. Bump and retry
|
||||
|
||||
-- idk <hankhill19580@gmail.com> Wed, 07 Jul 2021 22:00:25 -0400
|
||||
|
||||
connection interrupted mid release, retry failed validation. Bump and retry
|
||||
|
||||
i2psetproxy.js (0.107-1) UNRELEASED; urgency=low
|
||||
|
||||
* Small code fixes
|
||||
* Fix for interference with non-I2P containers
|
||||
|
||||
-- idk <hankhill19580@gmail.com> Wed, 26 May 2021 12:56:56 -0400
|
||||
-- idk <hankhill19580@gmail.com> Wed, 07 Jul 2021 22:00:25 -0400
|
||||
|
||||
i2psetproxy.js (0.105-1) UNRELEASED; urgency=low
|
||||
|
||||
|
116
handler.js
116
handler.js
@ -1,73 +1,73 @@
|
||||
function routerHost(url) {
|
||||
// console.log("(urlcheck) HANDLER URL CHECK");
|
||||
let hostname = "";
|
||||
let path = "";
|
||||
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") ||
|
||||
url.includes(":7662")
|
||||
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") {
|
||||
if (!url.includes(".css")) {
|
||||
console.log("(urlcheck) Mail application path", final);
|
||||
return "webmail";
|
||||
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('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.startsWith('i2pbote')) {
|
||||
if (!url.includes('.png')) {
|
||||
console.log('(urlcheck) I2PBote application path', final);
|
||||
return 'i2pbote';
|
||||
}
|
||||
} else if (
|
||||
final === "home" ||
|
||||
final === "console" ||
|
||||
final === "dns" ||
|
||||
final === "susidns" ||
|
||||
final.startsWith("susidns") ||
|
||||
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);
|
||||
}
|
||||
|
||||
@ -77,36 +77,36 @@ 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);
|
||||
|
169
home.css
169
home.css
@ -1,23 +1,19 @@
|
||||
|
||||
|
||||
* {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
margin: 0
|
||||
}
|
||||
|
||||
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;
|
||||
scrollbar-color: #bcd #789
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 20px 40px;
|
||||
font-family: Open Sans, Noto Sans, Segoe UI, sans-serif;
|
||||
font-family: Open Sans,Noto Sans,Segoe UI,sans-serif;
|
||||
font-size: 12pt;
|
||||
color: #495057;
|
||||
text-decoration: none;
|
||||
@ -25,51 +21,46 @@ body {
|
||||
border-left: 1px solid #495057;
|
||||
border-right: 1px solid #495057;
|
||||
box-shadow: 0 0 2px 2px rgba(0, 0, 0, .1);
|
||||
background: #f2f2f2;
|
||||
background: #f2f2f2
|
||||
}
|
||||
|
||||
h1, h2, h3, h4 {
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4 {
|
||||
display: block;
|
||||
font-weight: 700;
|
||||
font-weight: 700
|
||||
}
|
||||
|
||||
h1 {
|
||||
text-transform: uppercase;
|
||||
font-weight: 900;
|
||||
font-size: 200%;
|
||||
font-size: 200%
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 140%;
|
||||
font-size: 140%
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 120%;
|
||||
font-size: 120%
|
||||
}
|
||||
|
||||
h4 {
|
||||
margin-bottom: 5px;
|
||||
text-align: right;
|
||||
text-transform: none;
|
||||
font-size: 90%;
|
||||
font-weight: 600;
|
||||
font-style: italic;
|
||||
font-style: italic
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 15px;
|
||||
width: 100%;
|
||||
line-height: 1.4;
|
||||
word-wrap: break-word;
|
||||
text-align: justify;
|
||||
text-decoration: none;
|
||||
text-decoration: none
|
||||
}
|
||||
|
||||
ul {
|
||||
margin: 10px 20px;
|
||||
list-style: none;
|
||||
list-style: none
|
||||
}
|
||||
|
||||
li {
|
||||
margin-left: 0;
|
||||
padding: 12px 15px 15px 20px;
|
||||
@ -78,63 +69,58 @@ li {
|
||||
border: 1px solid #9ab;
|
||||
border-radius: 2px;
|
||||
box-shadow: inset 0 0 0 1px #fff;
|
||||
background: #dee2e6;
|
||||
background: #dee2e6
|
||||
}
|
||||
|
||||
li li {
|
||||
padding-bottom: 0;
|
||||
width: calc(100% - 40px);
|
||||
text-align: left;
|
||||
border: none;
|
||||
border-top: 1px solid #9ab;
|
||||
box-shadow: none;
|
||||
box-shadow: none
|
||||
}
|
||||
|
||||
li li:first-of-type {
|
||||
margin-top: 15px;
|
||||
border-top: none;
|
||||
border-top: none
|
||||
}
|
||||
|
||||
li a:first-of-type {
|
||||
display: block;
|
||||
width: 100%;
|
||||
width: 100%
|
||||
}
|
||||
|
||||
#applicationExplain {
|
||||
float: unset;
|
||||
float: unset
|
||||
}
|
||||
|
||||
li+li {
|
||||
margin-top: 15px;
|
||||
margin-top: 15px
|
||||
}
|
||||
|
||||
h3+ul, ul+h3, ul+h2 {
|
||||
margin-top: 20px;
|
||||
h3+ul,
|
||||
ul+h2,
|
||||
ul+h3 {
|
||||
margin-top: 20px
|
||||
}
|
||||
|
||||
a, button {
|
||||
a,
|
||||
button {
|
||||
color: #3b6bbf;
|
||||
text-decoration: none;
|
||||
font-weight: 700;
|
||||
word-wrap: break-word;
|
||||
outline: 0;
|
||||
outline: 0
|
||||
}
|
||||
|
||||
.applicationDesc {
|
||||
color: #81888f;
|
||||
text-decoration: none;
|
||||
font-weight: 700;
|
||||
word-wrap: break-word;
|
||||
outline: 0;
|
||||
outline: 0
|
||||
}
|
||||
|
||||
.applicationDesc:hover, a:hover, button:hover {
|
||||
.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;
|
||||
@ -142,14 +128,12 @@ button {
|
||||
text-decoration: none;
|
||||
font-weight: 700;
|
||||
word-wrap: break-word;
|
||||
outline: 0;
|
||||
outline: 0
|
||||
}
|
||||
|
||||
.background {
|
||||
background-color: #f8f8ff;
|
||||
height: 100%;
|
||||
height: 100%
|
||||
}
|
||||
|
||||
.content {
|
||||
margin: 1.5rem;
|
||||
padding: 1rem;
|
||||
@ -158,11 +142,14 @@ button {
|
||||
display: inline-block;
|
||||
border: 1px solid #d9d9d6;
|
||||
border-radius: 2px;
|
||||
box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccc;
|
||||
background: #f8f8ff;
|
||||
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc;
|
||||
background: #f8f8ff
|
||||
}
|
||||
|
||||
#header, .application-info, .browser-info, .extended-info, .search-info {
|
||||
#header,
|
||||
.application-info,
|
||||
.browser-info,
|
||||
.extended-info,
|
||||
.search-info {
|
||||
margin-top: 1.5rem;
|
||||
padding: 1rem;
|
||||
min-height: 3rem;
|
||||
@ -170,15 +157,14 @@ button {
|
||||
display: inline-block;
|
||||
border: 1px solid #d9d9d6;
|
||||
border-radius: 2px;
|
||||
box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccc;
|
||||
background: #f8f8ff;
|
||||
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc;
|
||||
background: #f8f8ff
|
||||
}
|
||||
|
||||
.showhider {
|
||||
margin-right: auto;
|
||||
padding: 0!important;
|
||||
text-transform: uppercase;
|
||||
background: none !important;
|
||||
background: none!important;
|
||||
border: none;
|
||||
width: 90%;
|
||||
color: #3b6bbf;
|
||||
@ -186,19 +172,16 @@ button {
|
||||
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;
|
||||
margin-bottom: 80px
|
||||
}
|
||||
|
||||
#readyness {
|
||||
padding-top: 1rem;
|
||||
padding-bottom: 1rem;
|
||||
@ -209,10 +192,9 @@ button {
|
||||
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;
|
||||
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc;
|
||||
display: inline-block
|
||||
}
|
||||
|
||||
#onboarding {
|
||||
min-height: 5rem;
|
||||
padding: .5rem;
|
||||
@ -225,9 +207,8 @@ button {
|
||||
text-align: center!important;
|
||||
border: 1px solid #a48fe1;
|
||||
border-radius: 2px;
|
||||
box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccc;
|
||||
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc
|
||||
}
|
||||
|
||||
#i2pbrowser-description {
|
||||
padding-top: 1rem;
|
||||
padding-bottom: 1rem;
|
||||
@ -237,9 +218,8 @@ button {
|
||||
background: #dee2e6;
|
||||
border: 1px solid #dee2e6;
|
||||
border-radius: 2px;
|
||||
box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccc;
|
||||
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc
|
||||
}
|
||||
|
||||
#linksExplain {
|
||||
min-height: 5rem;
|
||||
padding: .5rem;
|
||||
@ -250,10 +230,10 @@ button {
|
||||
text-align: center!important;
|
||||
border: 1px solid #dee2e6;
|
||||
border-radius: 2px;
|
||||
box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccc;
|
||||
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc
|
||||
}
|
||||
|
||||
#applicationExplain, #controlExplain {
|
||||
#applicationExplain,
|
||||
#controlExplain {
|
||||
min-height: 5rem;
|
||||
padding: .5rem;
|
||||
margin: .5rem;
|
||||
@ -263,10 +243,9 @@ button {
|
||||
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;
|
||||
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc;
|
||||
float: left
|
||||
}
|
||||
|
||||
#proxyReady {
|
||||
min-height: 3rem;
|
||||
padding: .5rem;
|
||||
@ -279,9 +258,8 @@ button {
|
||||
text-align: center!important;
|
||||
border: 1px solid #d9d9d6;
|
||||
border-radius: 2px;
|
||||
box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccc;
|
||||
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc
|
||||
}
|
||||
|
||||
#proxyUnready {
|
||||
min-height: 3rem;
|
||||
padding: .5rem;
|
||||
@ -294,9 +272,8 @@ button {
|
||||
border: 1px solid #ffc56d;
|
||||
border-radius: 2px;
|
||||
background: #ffc56d;
|
||||
box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccc;
|
||||
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc
|
||||
}
|
||||
|
||||
#consoleOn {
|
||||
min-height: 3rem;
|
||||
padding: .5rem;
|
||||
@ -309,49 +286,41 @@ button {
|
||||
border: 1px solid #f7e59a;
|
||||
border-radius: 2px;
|
||||
background: #f7e59a;
|
||||
box-shadow: inset 0 0 0 1px #fff, 0 0 1px #ccc;
|
||||
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%;
|
||||
max-width: 100%
|
||||
}
|
||||
|
||||
img.readyness {
|
||||
height: 100%;
|
||||
width: auto;
|
||||
width: auto
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 399px) {
|
||||
.application-info {
|
||||
display: none;
|
||||
display: none
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1200px) {
|
||||
body {
|
||||
font-size: 10.5pt;
|
||||
font-size: 10.5pt
|
||||
}
|
||||
}
|
||||
|
||||
video {
|
||||
width: 100%
|
||||
}
|
||||
|
||||
.hidden {
|
||||
visibility: none;
|
||||
display: none
|
||||
|
@ -147,6 +147,7 @@
|
||||
</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
34
home.js
@ -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';
|
||||
}
|
||||
}
|
||||
|
320
host.js
320
host.js
@ -1,175 +1,187 @@
|
||||
function proxyHost(url) {
|
||||
let hostname = "";
|
||||
if (url.indexOf("://") > -1) {
|
||||
hostname = url.split("/")[2];
|
||||
} else {
|
||||
hostname = url.split("/")[0];
|
||||
}
|
||||
if (hostname == "proxy.i2p") {
|
||||
return true;
|
||||
}
|
||||
if (
|
||||
hostname == "c6lilt4cr5x7jifxridpkesf2zgfwqfchtp6laihr4pdqomq25iq.b32.i2p"
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
let hostname = '';
|
||||
if (url.indexOf('://') > -1) {
|
||||
hostname = url.split('/')[2];
|
||||
} else {
|
||||
hostname = url.split('/')[0];
|
||||
}
|
||||
if (hostname == 'proxy.i2p') {
|
||||
return true;
|
||||
}
|
||||
if (
|
||||
hostname == 'c6lilt4cr5x7jifxridpkesf2zgfwqfchtp6laihr4pdqomq25iq.b32.i2p'
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function localHost(url) {
|
||||
let hostname = "";
|
||||
if (url.indexOf("://") > -1) {
|
||||
hostname = url.split("/")[2];
|
||||
} else {
|
||||
hostname = url.split("/")[0];
|
||||
}
|
||||
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";
|
||||
}
|
||||
let hostname = '';
|
||||
if (url.indexOf('://') > -1) {
|
||||
hostname = url.split('/')[2];
|
||||
} else {
|
||||
hostname = url.split('/')[0];
|
||||
}
|
||||
hostname = hostname.split(':')[0];
|
||||
console.log('(urlcheck) hostname localhost', hostname);
|
||||
console.log('(urlcheck) url localhost', url);
|
||||
if (hostname === '127.0.0.1') {
|
||||
if (url.indexOf(':7671') != -1) return 'reseed';
|
||||
if (url.indexOf(':8084') != -1) return 'blog';
|
||||
if (url.indexOf(':7672') != -1) return 'blog';
|
||||
if (url.indexOf(':7673') != -1) return 'blog';
|
||||
if (url.indexOf(':7669') != -1) return 'irc';
|
||||
if (url.indexOf(':7695') != -1) return 'tortab';
|
||||
} else if (hostname === 'localhost') {
|
||||
if (url.indexOf(':7671') != -1) return 'reseed';
|
||||
if (url.indexOf(':8084') != -1) return 'blog';
|
||||
if (url.indexOf(':7672') != -1) return 'blog';
|
||||
if (url.indexOf(':7673') != -1) return 'blog';
|
||||
if (url.indexOf(':7669') != -1) return 'irc';
|
||||
if (url.indexOf(':7695') != -1) return 'tortab';
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
function extensionHost(url) {
|
||||
var prefix = browser.runtime
|
||||
.getURL("")
|
||||
.replace("moz-extension://", "")
|
||||
.replace("/", "");
|
||||
if (url.originUrl !== undefined) {
|
||||
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.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);
|
||||
var prefix = browser.runtime
|
||||
.getURL('')
|
||||
.replace('moz-extension://', '')
|
||||
.replace('/', '');
|
||||
if (url.originUrl !== undefined) {
|
||||
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.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 = "";
|
||||
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;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (hostname != "") {
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (url.indexOf('://') > -1) {
|
||||
hostname = url.split('/')[2];
|
||||
} else {
|
||||
hostname = url.split('/')[0];
|
||||
}
|
||||
} else if (url.indexOf("://") > -1) {
|
||||
hostname = url.split("/")[2];
|
||||
} else {
|
||||
hostname = url.split("/")[0];
|
||||
}
|
||||
console.log("(hosts) scrub", hostname);
|
||||
return hostname;
|
||||
console.log('(hosts) scrub', hostname);
|
||||
return hostname;
|
||||
}
|
||||
|
||||
function i2pHost(url) {
|
||||
let hostname = i2pHostName(url);
|
||||
return hostname.endsWith(".i2p");
|
||||
let hostname = i2pHostName(url);
|
||||
let postname = hostname.split(':')[0];
|
||||
return postname.endsWith('.i2p');
|
||||
}
|
||||
|
||||
function routerHost(url) {
|
||||
// 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";
|
||||
} else if (
|
||||
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") {
|
||||
if (!url.includes(".css")) {
|
||||
console.log("(urlcheck) Mail application path", final);
|
||||
return "webmail";
|
||||
// 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';
|
||||
} else if (
|
||||
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') {
|
||||
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 === 'susidns' ||
|
||||
final.startsWith('susidns') ||
|
||||
final === 'sitemap' ||
|
||||
final.startsWith('config')
|
||||
) {
|
||||
console.log('(urlcheck) Console application path', final);
|
||||
return 'routerconsole';
|
||||
}
|
||||
}
|
||||
} 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 === "susidns" ||
|
||||
final.startsWith("susidns") ||
|
||||
final === "sitemap" ||
|
||||
final.startsWith("config")
|
||||
) {
|
||||
console.log("(urlcheck) Console application path", final);
|
||||
return "routerconsole";
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
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 + "/", "");
|
||||
}
|
||||
if (hostname === control_host + ":" + control_port) {
|
||||
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) {
|
||||
return pathcheck(path);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
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 + '/', '');
|
||||
}
|
||||
if (hostname === control_host + ':' + control_port) {
|
||||
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) {
|
||||
return pathcheck(path);
|
||||
}
|
||||
return false;
|
||||
}
|
@ -1,412 +1,420 @@
|
||||
var hello = "hello i2pcontrol";
|
||||
if (browser.windows != undefined) {
|
||||
var hello = 'hello i2pcontrol';
|
||||
|
||||
function makeid(length) {
|
||||
var result = "";
|
||||
var characters =
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
||||
var charactersLength = characters.length;
|
||||
for (var i = 0; i < length; i++) {
|
||||
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function send(
|
||||
message,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc"
|
||||
) {
|
||||
async function postData(url = "", data = {}) {
|
||||
// Default options are marked with *
|
||||
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
|
||||
headers: {
|
||||
"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
|
||||
};
|
||||
const response = await fetch(url, opts);
|
||||
return await response.json(); // parses JSON response into native JavaScript objects
|
||||
function makeid(length) {
|
||||
var result = '';
|
||||
var characters =
|
||||
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
||||
var charactersLength = characters.length;
|
||||
for (var i = 0; i < length; i++) {
|
||||
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
//console.log("http://" + control_host + ":" + control_port + "/" + control_path)
|
||||
return postData(
|
||||
"http://" + control_host + ":" + control_port + "/" + control_path + "/",
|
||||
message
|
||||
);
|
||||
}
|
||||
function send(
|
||||
message,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc"
|
||||
) {
|
||||
async function postData(url = "", data = {}) {
|
||||
// Default options are marked with *
|
||||
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
|
||||
headers: {
|
||||
'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
|
||||
};
|
||||
const response = await fetch(url, opts);
|
||||
return await response.json(); // parses JSON response into native JavaScript objects
|
||||
}
|
||||
|
||||
async function authenticate(
|
||||
password = "itoopie",
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
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;
|
||||
return send(json, control_host, control_port, control_path);
|
||||
}
|
||||
|
||||
async function GetToken(
|
||||
password = "itoopie",
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc"
|
||||
) {
|
||||
function gettoken(authtoken) {
|
||||
return authtoken.result.Token;
|
||||
//console.log("http://" + control_host + ":" + control_port + "/" + control_path)
|
||||
return postData(
|
||||
'http://' + control_host + ':' + control_port + '/' + control_path + '/',
|
||||
message
|
||||
);
|
||||
}
|
||||
let me = authenticate(password, control_host, control_port, control_path);
|
||||
return await me.then(gettoken);
|
||||
}
|
||||
|
||||
async function Echo(
|
||||
message,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc",
|
||||
password = "itoopie"
|
||||
) {
|
||||
function echo(token) {
|
||||
console.log("(i2pcontrol) testing I2PControl connection");
|
||||
async function authenticate(
|
||||
password = "itoopie",
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc"
|
||||
) {
|
||||
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'] = 'Authenticate';
|
||||
json['params'] = new Object();
|
||||
json['params']['API'] = 1;
|
||||
json['params']['Password'] = password;
|
||||
return send(json, control_host, control_port, control_path);
|
||||
}
|
||||
let token = GetToken(password, control_host, control_port, control_path);
|
||||
let done = await token.then(echo);
|
||||
return done;
|
||||
}
|
||||
|
||||
function UpdateEchoElementByID(
|
||||
Query,
|
||||
ID,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc"
|
||||
) {
|
||||
function updateelement(update) {
|
||||
//console.log("(i2pcontrol)", update);
|
||||
if (document.getElementById(ID) !== null)
|
||||
document.getElementById(ID).innerText = update;
|
||||
async function GetToken(
|
||||
password = "itoopie",
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc"
|
||||
) {
|
||||
function gettoken(authtoken) {
|
||||
return authtoken.result.Token;
|
||||
}
|
||||
let me = authenticate(password, control_host, control_port, control_path);
|
||||
return await me.then(gettoken);
|
||||
}
|
||||
let net = Echo(Query, control_host, control_port, control_path, password);
|
||||
net.then(updateleement);
|
||||
}
|
||||
|
||||
async function GetRate(
|
||||
Query,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc",
|
||||
password = "itoopie"
|
||||
) {
|
||||
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;
|
||||
return send(json, control_host, control_port, control_path);
|
||||
async function Echo(
|
||||
message,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc",
|
||||
password = "itoopie"
|
||||
) {
|
||||
function echo(token) {
|
||||
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;
|
||||
return send(json, control_host, control_port, control_path);
|
||||
}
|
||||
let token = GetToken(password, control_host, control_port, control_path);
|
||||
let done = await token.then(echo);
|
||||
return done;
|
||||
}
|
||||
let token = GetToken(password, control_host, control_port, control_path);
|
||||
let done = await token.then(getrate);
|
||||
return done;
|
||||
}
|
||||
|
||||
function UpdateGetRateElementByID(
|
||||
Query,
|
||||
ID,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc"
|
||||
) {
|
||||
function updateelement(update) {
|
||||
//console.log("(i2pcontrol)", update);
|
||||
if (document.getElementById(ID) !== null)
|
||||
document.getElementById(ID).innerText = update;
|
||||
}
|
||||
let net = GetRate(Query, control_host, control_port, control_path, password);
|
||||
net.then(updateleement);
|
||||
}
|
||||
|
||||
async function I2PControl(
|
||||
Query,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc",
|
||||
password = "itoopie"
|
||||
) {
|
||||
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;
|
||||
return send(json, control_host, control_port, control_path);
|
||||
}
|
||||
let token = GetToken(password, control_host, control_port, control_path);
|
||||
let done = await token.then(i2pcontrol);
|
||||
return done;
|
||||
}
|
||||
|
||||
function UpdateI2PControlElementByID(
|
||||
Query,
|
||||
ID,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc"
|
||||
) {
|
||||
function updateelement(update) {
|
||||
//console.log("(i2pcontrol)", update);
|
||||
if (document.getElementById(ID) !== null)
|
||||
document.getElementById(ID).innerText = update;
|
||||
}
|
||||
let net = I2PControl(
|
||||
function UpdateEchoElementByID(
|
||||
Query,
|
||||
control_host,
|
||||
control_port,
|
||||
control_path,
|
||||
password
|
||||
);
|
||||
net.then(updateleement);
|
||||
}
|
||||
|
||||
async function RouterInfo(
|
||||
Query,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc",
|
||||
password = "itoopie"
|
||||
) {
|
||||
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;
|
||||
return send(json, control_host, control_port, control_path);
|
||||
ID,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc"
|
||||
) {
|
||||
function updateelement(update) {
|
||||
//console.log("(i2pcontrol)", update);
|
||||
if (document.getElementById(ID) !== null)
|
||||
document.getElementById(ID).innerText = update;
|
||||
}
|
||||
let net = Echo(Query, control_host, control_port, control_path, password);
|
||||
net.then(updateleement);
|
||||
}
|
||||
let token = GetToken(password, control_host, control_port, control_path);
|
||||
let done = await token.then(routerinfo);
|
||||
return done;
|
||||
}
|
||||
|
||||
function UpdateRouterInfoElementByID(
|
||||
Query,
|
||||
ID,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc",
|
||||
password = "itoopie"
|
||||
) {
|
||||
function updateelement(update) {
|
||||
/*console.log(
|
||||
async function GetRate(
|
||||
Query,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc",
|
||||
password = "itoopie"
|
||||
) {
|
||||
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;
|
||||
return send(json, control_host, control_port, control_path);
|
||||
}
|
||||
let token = GetToken(password, control_host, control_port, control_path);
|
||||
let done = await token.then(getrate);
|
||||
return done;
|
||||
}
|
||||
|
||||
function UpdateGetRateElementByID(
|
||||
Query,
|
||||
ID,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc"
|
||||
) {
|
||||
function updateelement(update) {
|
||||
//console.log("(i2pcontrol)", update);
|
||||
if (document.getElementById(ID) !== null)
|
||||
document.getElementById(ID).innerText = update;
|
||||
}
|
||||
let net = GetRate(
|
||||
Query,
|
||||
control_host,
|
||||
control_port,
|
||||
control_path,
|
||||
password
|
||||
);
|
||||
net.then(updateleement);
|
||||
}
|
||||
|
||||
async function I2PControl(
|
||||
Query,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc",
|
||||
password = "itoopie"
|
||||
) {
|
||||
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;
|
||||
return send(json, control_host, control_port, control_path);
|
||||
}
|
||||
let token = GetToken(password, control_host, control_port, control_path);
|
||||
let done = await token.then(i2pcontrol);
|
||||
return done;
|
||||
}
|
||||
|
||||
function UpdateI2PControlElementByID(
|
||||
Query,
|
||||
ID,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc"
|
||||
) {
|
||||
function updateelement(update) {
|
||||
//console.log("(i2pcontrol)", update);
|
||||
if (document.getElementById(ID) !== null)
|
||||
document.getElementById(ID).innerText = update;
|
||||
}
|
||||
let net = I2PControl(
|
||||
Query,
|
||||
control_host,
|
||||
control_port,
|
||||
control_path,
|
||||
password
|
||||
);
|
||||
net.then(updateleement);
|
||||
}
|
||||
|
||||
async function RouterInfo(
|
||||
Query,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc",
|
||||
password = "itoopie"
|
||||
) {
|
||||
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;
|
||||
return send(json, control_host, control_port, control_path);
|
||||
}
|
||||
let token = GetToken(password, control_host, control_port, control_path);
|
||||
let done = await token.then(routerinfo);
|
||||
return done;
|
||||
}
|
||||
|
||||
function UpdateRouterInfoElementByID(
|
||||
Query,
|
||||
ID,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc",
|
||||
password = "itoopie"
|
||||
) {
|
||||
function updateelement(update) {
|
||||
/*console.log(
|
||||
"(i2pcontrol) element",
|
||||
update.result[Query],
|
||||
ID,
|
||||
document.getElementById(ID)
|
||||
);*/
|
||||
if (document.getElementById(ID) !== null)
|
||||
document.getElementById(ID).innerText = update.result[Query];
|
||||
if (document.getElementById(ID) !== null)
|
||||
document.getElementById(ID).innerText = update.result[Query];
|
||||
}
|
||||
|
||||
let net = RouterInfo(
|
||||
Query,
|
||||
control_host,
|
||||
control_port,
|
||||
control_path,
|
||||
password
|
||||
);
|
||||
net.then(updateelement);
|
||||
}
|
||||
|
||||
let net = RouterInfo(
|
||||
async function RouterManager(
|
||||
Query,
|
||||
control_host,
|
||||
control_port,
|
||||
control_path,
|
||||
password
|
||||
);
|
||||
net.then(updateelement);
|
||||
}
|
||||
|
||||
async function RouterManager(
|
||||
Query,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc",
|
||||
password = "itoopie"
|
||||
) {
|
||||
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;
|
||||
return send(json, control_host, control_port, control_path);
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc",
|
||||
password = "itoopie"
|
||||
) {
|
||||
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;
|
||||
return send(json, control_host, control_port, control_path);
|
||||
}
|
||||
let token = GetToken(password, control_host, control_port, control_path);
|
||||
let done = await token.then(routermanager);
|
||||
return done;
|
||||
}
|
||||
let token = GetToken(password, control_host, control_port, control_path);
|
||||
let done = await token.then(routermanager);
|
||||
return done;
|
||||
}
|
||||
|
||||
function UpdateRouterManagerElementByID(
|
||||
Query,
|
||||
ID,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc",
|
||||
password = "itoopie"
|
||||
) {
|
||||
function updateelement(update) {
|
||||
//console.log("(i2pcontrol)", update);
|
||||
if (document.getElementById(ID) !== null)
|
||||
function UpdateRouterManagerElementByID(
|
||||
Query,
|
||||
ID,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc",
|
||||
password = "itoopie"
|
||||
) {
|
||||
function updateelement(update) {
|
||||
//console.log("(i2pcontrol)", update);
|
||||
if (document.getElementById(ID) !== null)
|
||||
document.getElementById(ID).innerText = update;
|
||||
}
|
||||
let net = RouterManager(
|
||||
Query,
|
||||
control_host,
|
||||
control_port,
|
||||
control_path,
|
||||
password
|
||||
);
|
||||
net.then(updateleement);
|
||||
}
|
||||
|
||||
async function NetworkSetting(
|
||||
Query,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc",
|
||||
password = "itoopie"
|
||||
) {
|
||||
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;
|
||||
return send(json, control_host, control_port, control_path);
|
||||
}
|
||||
let token = GetToken(password, control_host, control_port, control_path);
|
||||
let done = await token.then(networksetting);
|
||||
return done;
|
||||
}
|
||||
|
||||
function UpdateNetworkSettingElementByID(
|
||||
Query,
|
||||
ID,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc",
|
||||
password = "itoopie"
|
||||
) {
|
||||
function updateelement(update) {
|
||||
//console.log("(i2pcontrol)", update);
|
||||
document.getElementById(ID).innerText = update;
|
||||
}
|
||||
let net = RouterManager(
|
||||
Query,
|
||||
control_host,
|
||||
control_port,
|
||||
control_path,
|
||||
password
|
||||
);
|
||||
net.then(updateleement);
|
||||
}
|
||||
|
||||
async function NetworkSetting(
|
||||
Query,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc",
|
||||
password = "itoopie"
|
||||
) {
|
||||
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;
|
||||
return send(json, control_host, control_port, control_path);
|
||||
}
|
||||
let token = GetToken(password, control_host, control_port, control_path);
|
||||
let done = await token.then(networksetting);
|
||||
return done;
|
||||
}
|
||||
|
||||
function UpdateNetworkSettingElementByID(
|
||||
Query,
|
||||
ID,
|
||||
control_host = "127.0.0.1",
|
||||
control_port = "7657",
|
||||
control_path = "jsonrpc",
|
||||
password = "itoopie"
|
||||
) {
|
||||
function updateelement(update) {
|
||||
//console.log("(i2pcontrol)", update);
|
||||
document.getElementById(ID).innerText = update;
|
||||
}
|
||||
let net = NetworkSetting(
|
||||
Query,
|
||||
control_host,
|
||||
control_port,
|
||||
control_path,
|
||||
password
|
||||
);
|
||||
net.then(updateleement);
|
||||
}
|
||||
|
||||
function UpdateContents() {
|
||||
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"
|
||||
);
|
||||
UpdateRouterInfoElementByID(
|
||||
"i2p.router.net.bw.inbound.15s",
|
||||
"router-net-bw-inbound-15s"
|
||||
);
|
||||
UpdateRouterInfoElementByID(
|
||||
"i2p.router.net.bw.outbound.1s",
|
||||
"router-net-bw-outbound-1s"
|
||||
);
|
||||
UpdateRouterInfoElementByID(
|
||||
"i2p.router.net.bw.outbound.15s",
|
||||
"router-net-bw-outbound-15s"
|
||||
);
|
||||
UpdateRouterInfoElementByID("i2p.router.net.status", "router-net-status");
|
||||
UpdateRouterInfoElementByID(
|
||||
"i2p.router.net.tunnels.participating",
|
||||
"router-net-tunnels-participating"
|
||||
);
|
||||
UpdateRouterInfoElementByID(
|
||||
"i2p.router.netdb.activepeers",
|
||||
"router-netdb-activepeers"
|
||||
);
|
||||
UpdateRouterInfoElementByID(
|
||||
"i2p.router.netdb.fastpeers",
|
||||
"router-netdb-fastpeers"
|
||||
);
|
||||
UpdateRouterInfoElementByID(
|
||||
"i2p.router.netdb.highcapacitypeers",
|
||||
"router-netdb-highcapacitypeers"
|
||||
);
|
||||
UpdateRouterInfoElementByID(
|
||||
"i2p.router.netdb.isreseeding",
|
||||
"router-netdb-isreseeding"
|
||||
);
|
||||
UpdateRouterInfoElementByID(
|
||||
"i2p.router.netdb.knownpeers",
|
||||
"router-netdb-knownpeers"
|
||||
);
|
||||
}
|
||||
|
||||
var done = Echo(hello);
|
||||
done.then(Done).catch(Done);
|
||||
|
||||
function Done(output) {
|
||||
function hide(elements) {
|
||||
elements = elements.length ? elements : [elements];
|
||||
for (var index = 0; index < elements.length; index++) {
|
||||
elements[index].style.display = "none";
|
||||
}
|
||||
let net = NetworkSetting(
|
||||
Query,
|
||||
control_host,
|
||||
control_port,
|
||||
control_path,
|
||||
password
|
||||
);
|
||||
net.then(updateleement);
|
||||
}
|
||||
|
||||
function unhide(elements) {
|
||||
elements = elements.length ? elements : [elements];
|
||||
for (var index = 0; index < elements.length; index++) {
|
||||
elements[index].style.display = "inline-block";
|
||||
function UpdateContents() {
|
||||
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'
|
||||
);
|
||||
UpdateRouterInfoElementByID(
|
||||
'i2p.router.net.bw.inbound.15s',
|
||||
'router-net-bw-inbound-15s'
|
||||
);
|
||||
UpdateRouterInfoElementByID(
|
||||
'i2p.router.net.bw.outbound.1s',
|
||||
'router-net-bw-outbound-1s'
|
||||
);
|
||||
UpdateRouterInfoElementByID(
|
||||
'i2p.router.net.bw.outbound.15s',
|
||||
'router-net-bw-outbound-15s'
|
||||
);
|
||||
UpdateRouterInfoElementByID('i2p.router.net.status', 'router-net-status');
|
||||
UpdateRouterInfoElementByID(
|
||||
'i2p.router.net.tunnels.participating',
|
||||
'router-net-tunnels-participating'
|
||||
);
|
||||
UpdateRouterInfoElementByID(
|
||||
'i2p.router.netdb.activepeers',
|
||||
'router-netdb-activepeers'
|
||||
);
|
||||
UpdateRouterInfoElementByID(
|
||||
'i2p.router.netdb.fastpeers',
|
||||
'router-netdb-fastpeers'
|
||||
);
|
||||
UpdateRouterInfoElementByID(
|
||||
'i2p.router.netdb.highcapacitypeers',
|
||||
'router-netdb-highcapacitypeers'
|
||||
);
|
||||
UpdateRouterInfoElementByID(
|
||||
'i2p.router.netdb.isreseeding',
|
||||
'router-netdb-isreseeding'
|
||||
);
|
||||
UpdateRouterInfoElementByID(
|
||||
'i2p.router.netdb.knownpeers',
|
||||
'router-netdb-knownpeers'
|
||||
);
|
||||
}
|
||||
|
||||
var done = Echo(hello);
|
||||
done.then(Done).catch (Done);
|
||||
|
||||
function Done(output) {
|
||||
function hide(elements) {
|
||||
elements = elements.length ? elements : [elements];
|
||||
for (var index = 0; index < elements.length; index++) {
|
||||
elements[index].style.display = 'none';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
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;
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 17 KiB |
371
index.html
371
index.html
@ -1,234 +1,225 @@
|
||||
<!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" />
|
||||
<title>I2P in Private Browsing Mode</title>
|
||||
<link href="home.css" rel="stylesheet" type="text/css">
|
||||
<link href="sidebar.css" rel="stylesheet" type="text/css">
|
||||
</head>
|
||||
<body>
|
||||
<h1>I2P in Private Browsing Mode(Firefox-Only)</h1>
|
||||
<h1>I2P in Private Browsing Mode(Firefox-Only)</h1>
|
||||
|
||||
<p>This is an webextension which introduces a set of new "Private Browsing" modes
|
||||
to Firefox-based browsers(Supporting webextensions) that makes it easier to
|
||||
configure a browser to use I2P securely and adds features for making I2P
|
||||
applications easier to use. It does this by isolating I2P-specific settings to
|
||||
Contextual Identities within Firefox, then loading them automatically when the
|
||||
user requests them. It also adds convenience and management features, like an
|
||||
embedded I2P console and Bittorrent integration with clients using the
|
||||
transmission-rpc API.</p>
|
||||
<p>This is an webextension which introduces a set of new "Private Browsing" modes to Firefox-based browsers(Supporting webextensions, must be current ESR or greater) that makes it easier to configure a browser to use I2P securely and adds features for making I2P applications easier to use. It does this by isolating I2P-specific settings to Contextual Identities within Firefox, then loading them automatically when the user requests them. It also adds convenience and management features, like an embedded I2P console and Bittorrent integration with clients using the transmission-rpc API and via in-browser protocol handling integrations.</p>
|
||||
|
||||
<h2>Privacy Policy</h2>
|
||||
<h2>Privacy Policy</h2>
|
||||
|
||||
<p>This browser extension does not collect any personal information. It requires
|
||||
access to local storage and browsing data permissions in order to delete them
|
||||
when directed to by the user. This browser extension does not transmit any
|
||||
information to any third party, nor will it, ever.</p>
|
||||
<p>This browser extension does not collect any personal information. It requires access to local storage and browsing data permissions in order to delete them when directed to by the user. This browser extension does not transmit any information to any third party, nor will it, ever.</p>
|
||||
|
||||
<p>This browser extension cannot influence telemetry carried out by browser vendors
|
||||
to determine performance in their distribution channels, nor can it mitigate any
|
||||
other browser vendor telemetry. </p>
|
||||
<p>This browser extension cannot influence telemetry carried out by browser vendors to determine performance in their distribution channels, nor can it mitigate any other browser vendor telemetry.</p>
|
||||
|
||||
<p>This browser extension is entirely Free, Open-Source software.</p>
|
||||
<p>This browser extension is entirely Free, Open-Source software.</p>
|
||||
|
||||
<h2>Installation(Cross-Platform):</h2>
|
||||
<h2>Installation(Cross-Platform):</h2>
|
||||
|
||||
<p>For desktop users this addon is available from addons.mozilla.org, where you
|
||||
will be able to recive automatic updates:
|
||||
<a href="https://addons.mozilla.org/en-US/firefox/addon/i2p-in-private-browsing/">I2P in Private Browsing</a>.</p>
|
||||
<p>For desktop users this addon is available from addons.mozilla.org, where you will be able to recive automatic updates: <a href="https://addons.mozilla.org/en-US/firefox/addon/i2p-in-private-browsing/">I2P in Private Browsing</a>.</p>
|
||||
|
||||
<h2>Debian Installation:</h2>
|
||||
<h2>Debian Installation:</h2>
|
||||
|
||||
<p>Should you prefer, it is possible to install this extension system-wide by
|
||||
side-loading it into Debian. You can generate your own deb file by running the
|
||||
command:</p>
|
||||
<p>Should you prefer, it is possible to install this extension system-wide by side-loading it into Debian. You can generate your own deb file by running the command:</p>
|
||||
|
||||
<pre><code> make deb
|
||||
<pre><code> make deb
|
||||
</code></pre>
|
||||
<p>and then you can install it with:</p>
|
||||
|
||||
<p>and then you can install it with:</p>
|
||||
|
||||
<pre><code> sudo apt install ../i2psetproxy.js_*.deb
|
||||
<pre><code> sudo apt install ../i2psetproxy.js_*.deb
|
||||
</code></pre>
|
||||
<h2>Bittorrent Download:</h2>
|
||||
|
||||
<h2>Bittorrent Download:</h2>
|
||||
<p>The self-hosted plugin is available from bittorrent both within the I2P and Clearnet Bittorrent network(With a web seed to support it in case one goes dead).</p>
|
||||
|
||||
<p>The self-hosted plugin is available from bittorrent both within the I2P and
|
||||
Clearnet Bittorrent network(With a web seed to support it in case one goes
|
||||
dead).</p>
|
||||
<ul>
|
||||
<li>
|
||||
<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>
|
||||
|
||||
<ul>
|
||||
<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>
|
||||
<li>
|
||||
<a href="./i2ppb@eyedeekay.github.io.xpi.torrent">Get the .torrent file</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2>Usage:</h2>
|
||||
<h2>Usage:</h2>
|
||||
|
||||
<ul>
|
||||
<li>Basically, it "Just Works." After you install the plugin, browsing to an I2P
|
||||
domain will automatically stop the current tab and re-open the I2P site in an
|
||||
I2P Browser tab.</li>
|
||||
<li>Besides that, four bookmarks are added to the "Bookmarks Toolbar," which
|
||||
will take you to visit your Java I2P applications, or the "Simplified I2P
|
||||
Landing Page" embedded in the plugin:</li>
|
||||
<li><img src="lander.png" alt="Landing page" title="" /></li>
|
||||
<li>Also, there's a menu for accessing I2P functionality while you're browsing.
|
||||
It lets you control a few settings in a granular way.</li>
|
||||
<li><img src="menu.png" alt="Menu" title="" /></li>
|
||||
<li>You can re-enable WebRTC but force it to always use the proxy that is
|
||||
enforced by the tab.</li>
|
||||
<li>You can either force the browser to delete all history for I2P sites
|
||||
immediately, or you can close all your I2P Browser tabs at once and delete
|
||||
the history for I2P browsing when you're done.</li>
|
||||
<li>That's all there is to it! Your browser is configured to safely use and
|
||||
administer I2P.</li>
|
||||
<li>Optionally, you can add I2PSnark-RPC and use Bittorrent-over-I2P via the
|
||||
transmission-rpc interface. To do this, have a look at the torrent guide:
|
||||
<a href="torrent/index.html">Torrent guide</a></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>Basically, it "Just Works." After you install the plugin, browsing to an I2P domain will automatically stop the current tab and re-open the I2P site in an I2P Browser tab.</li>
|
||||
|
||||
<h3>Features</h3>
|
||||
<li>Besides that, four bookmarks are added to the "Bookmarks Toolbar," which will take you to visit your Java I2P applications, or the "Simplified I2P Landing Page" embedded in the plugin:</li>
|
||||
|
||||
<ul>
|
||||
<li>[done] <strong>Provide</strong> a way to launch into an I2P-Specific contextual identity
|
||||
(container). Intercept requests to .i2p domains and automatically route them
|
||||
to the I2P container. Isolate the router console from other local
|
||||
applications by automatically intercepting requests to the router console to
|
||||
another container.</li>
|
||||
<li><img src="i2psetproxy.js.png" alt="Visiting i2p-projekt.i2p" title="" /></li>
|
||||
<li>[done] <strong>Indicate</strong> the I2P browser is in use visually. Find an
|
||||
acceptable way to indicate it on Android.</li>
|
||||
<li><img src="susimail.png" alt="Visiting webmail" title="" /></li>
|
||||
<li>[done] <strong>Set</strong> the http proxy to use the local I2P proxy automatically.
|
||||
Provide specific configuration for other types of I2P proxies(SOCKS,
|
||||
isolating HTTP)</li>
|
||||
<li>[done] <strong>Disable</strong> risky webRTC features/offer the option to re-enable
|
||||
them with the proxy enforced.</li>
|
||||
<li>[done] <strong>Change</strong> the color of the browser window to indicate that I2P is in
|
||||
use</li>
|
||||
<li><img src="i2ptunnel.png" alt="Visiting i2ptunnel" title="" /></li>
|
||||
<li>[ready] <strong>Provide</strong> help in a variety of languages.</li>
|
||||
<li>[done] <strong>Monitor</strong> the health and readiness of the I2P router it is
|
||||
instructed to use. Currently the plugin checks whether the HTTP Proxy is
|
||||
working by fetching an image from "http://proxy.i2p" and displaying a result.
|
||||
A work-in-progress binding to i2pcontrol is available in ./i2pcontrol, it is
|
||||
inert at this time.</li>
|
||||
<li><img src="toopie.png" alt="Visiting toopie.html" title="" /></li>
|
||||
<li>[Done] <strong>Handle</strong> router console applications under their own origins and
|
||||
within their own contextual identity. (1) The router console is automatically
|
||||
confined to it's own container tab. (2) Use a custom protocol handler to
|
||||
place each i2p application/plugin under it's own origin, shortening router
|
||||
console URL's and placing applications under their own origin.</li>
|
||||
<li><img src="routerconsole.png" alt="Visiting routerconsole" title="" /></li>
|
||||
<li>[Done] <strong>Handle Torrents</strong> by talking to i2psnark-rpc plugin and then
|
||||
adding them directly into the Firefox downloads drop-downs, menus, etc. Enable
|
||||
the use of I2PSnark as a peer-to-peer delivery mechanism for media files.</li>
|
||||
<li><img src="i2psnark.png" alt="Visiting i2psnark" title="" /></li>
|
||||
<li><img src="transmissionrpc.png" alt="Monitoring torrents" title="" /></li>
|
||||
<li>[Done] <strong>Enhance</strong> the I2P browsing experience by allowing site developers
|
||||
distribute some or all of their resources as torrents, allowing the torrents to
|
||||
be treated effectively as a CDN.</li>
|
||||
<li><img 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
|
||||
browsing are "I2P Browsing" and "Web Browsing" where I2P Browsing is capable
|
||||
of using an outproxy but in the case of traffic destined for the clearnet
|
||||
does not do header rewriting, and Web Browsing falls back to the Proxy
|
||||
configured in Firefox. The I2P Browsing will be expanded to
|
||||
<ul>
|
||||
<li>I2P Amnesiac Browsing: Use for General Browsing, stores no history and
|
||||
uses an HTTP Proxy with a very short tunnel-close timeout and no key-reuse.</li>
|
||||
<li>I2P Social Networking: Use this for logging into social network accounts,
|
||||
forums, and other interactive asynchronous public communication platforms
|
||||
where your identity is behaviorally linkable. This has a very long
|
||||
tunnel-close timeout and key-reuse until specifically invoked.</li>
|
||||
<li>I2P Blogging: Use this for posting content to the web interface of your
|
||||
blog or to other similar websites that you create content on.</li>
|
||||
</ul></li>
|
||||
<li><img src="clearweb.png" alt="Visiting clearweb" title="" /></li>
|
||||
</ul>
|
||||
<li><img alt="Landing page" src="lander.png" title="">
|
||||
</li>
|
||||
|
||||
<h3>Video</h3>
|
||||
<li>Also, there's a menu for accessing I2P functionality while you're browsing. It lets you control a few settings in a granular way.</li>
|
||||
|
||||
<ul>
|
||||
<li><img src="i2psetproxy.js.gif" alt="Video of the plugin in action" title="" /></li>
|
||||
</ul>
|
||||
<li><img alt="Menu" src="menu.png" title="">
|
||||
</li>
|
||||
|
||||
<h2>Documents</h2>
|
||||
<li>You can re-enable WebRTC but force it to always use the proxy that is enforced by the tab.</li>
|
||||
|
||||
<ul>
|
||||
<li><strong><a href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/download/docs/Browser.Design.Documentation.pdf">Browser Outline</a></strong>: This document is an outline of each of
|
||||
the browser extension's feature panels in presentation form.</li>
|
||||
<li><strong><a href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/download/docs/Landing.Page.Documentation.pdf">Smart Lander Design</a></strong>: This is the original outline of
|
||||
the smart landing page which became the I2P home page within the browser and
|
||||
the drop-down control panel.</li>
|
||||
<li><strong><a href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/wiki/Other-Extensions">Other extensions</a></strong>: and how they work with this one.</li>
|
||||
</ul>
|
||||
<li>You can either force the browser to delete all history for I2P sites immediately, or you can close all your I2P Browser tabs at once and delete the history for I2P browsing when you're done.</li>
|
||||
|
||||
<h2>Super Extra Important Background Info:</h2>
|
||||
<li>That's all there is to it! Your browser is configured to safely use and administer I2P.</li>
|
||||
|
||||
<p>This plugin's viability is directly related to the viability of Mozilla and
|
||||
Tor's work on hardening Firefox itself and of particular interest are the
|
||||
"Uplift" and "Fusion(Firefox Using Onions)" projects.</p>
|
||||
<li>Optionally, you can add I2PSnark-RPC and use Bittorrent-over-I2P via the transmission-rpc interface. To do this, have a look at the torrent guide: <a href="torrent/index.html">Torrent guide</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3>Links about Project Uplift</h3>
|
||||
<h3>Features</h3>
|
||||
|
||||
<ul>
|
||||
<li><a href="https://wiki.mozilla.org/Security/Tor_Uplift">Tor Uplift</a> is a project which
|
||||
brings important features of the Tor Browser to the mainstream of Firefox
|
||||
users by including patches from Tor Browser Bundle into Firefox where it is
|
||||
appropriate.</li>
|
||||
<li><a href="https://wiki.mozilla.org/Security/FirstPartyIsolation">First Party Isolation</a>
|
||||
is a feature in Firefox and other browsers which keeps information from
|
||||
leaking across first-party domains.</li>
|
||||
<li><a href="https://wiki.mozilla.org/Security/Fingerprinting">Fingerprinting</a> is a
|
||||
technique where a tracker attempts to extract unique information about a user
|
||||
from a side-channel in order to create an identifier that can be used to
|
||||
correlate the user across many sites.</li>
|
||||
<li><a href="https://wiki.mozilla.org/Security/Fennec%2BTor_Project">Fennec</a> is Firefox
|
||||
for Android and this link has some analysis of the privacy consequences of the
|
||||
Android platform.</li>
|
||||
<li><a href="https://wiki.mozilla.org/Security/Tor_Uplift/Tracking">Tracking</a> in Firefox
|
||||
is surveyed here.</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>[done] <strong>Provide</strong> a way to launch into an I2P-Specific contextual identity (container). Intercept requests to .i2p domains and automatically route them to the I2P container. Isolate the router console from other local applications by automatically intercepting requests to the router console to another container.</li>
|
||||
|
||||
<p>Project uplift seems to have largely been accomplished?</p>
|
||||
<li><img alt="Visiting i2p-projekt.i2p" src="i2psetproxy.js.png" title="">
|
||||
</li>
|
||||
|
||||
<h3>Links about Project Fusion</h3>
|
||||
<li>[done] <strong>Indicate</strong> the I2P browser is in use visually. Find an acceptable way to indicate it on Android.</li>
|
||||
|
||||
<ul>
|
||||
<li><a href="https://wiki.mozilla.org/Security/Fusion">Project Fusion</a> or Firefox using
|
||||
Onions is a joint Mozilla/Tor effort to create an enhanced Private Browsing
|
||||
mode for Firefox which uses Tor.</li>
|
||||
<li><a href="https://trac.torproject.org/projects/tor/wiki/org/meetings/2018Rome/Notes/FusionProject">Notes</a>
|
||||
from a meeting about Fusion.</li>
|
||||
<li><a href="https://blog.torproject.org/tor-heart-firefox">Tor at the Heart: Firefox</a> is
|
||||
a blog about Tor and the relationship they have to Firefox re: TBB, Fusion.</li>
|
||||
</ul>
|
||||
<li><img alt="Visiting webmail" src="susimail.png" title="">
|
||||
</li>
|
||||
|
||||
<h2>The <strong>Other</strong> Version</h2>
|
||||
<li>[done] <strong>Set</strong> the http proxy to use the local I2P proxy automatically. Provide specific configuration for other types of I2P proxies(SOCKS, isolating HTTP)</li>
|
||||
|
||||
<p>New versions of this extension create an I2P in Private Browsing mode instead,
|
||||
using container tabs.</p>
|
||||
<li>[done] <strong>Disable</strong> risky webRTC features/offer the option to re-enable them with the proxy enforced.</li>
|
||||
|
||||
<p>Since this is a drastic change to the behavior of the old plugin, and since there
|
||||
is no UI a new entry
|
||||
for the new plugin has been made at a new location on addons.mozilla.org.</p>
|
||||
<li>[done] <strong>Change</strong> the color of the browser window to indicate that I2P is in use</li>
|
||||
|
||||
<ul>
|
||||
<li><p>This is the new version: <a href="https://addons.mozilla.org/en-US/firefox/addon/i2p-in-private-browsing/">[link]</a></p></li>
|
||||
<li><p>This is the old version: <a href="https://addons.mozilla.org/en-US/firefox/addon/I2P-Proxy/">[link]</a></p></li>
|
||||
</ul>
|
||||
<li><img alt="Visiting i2ptunnel" src="i2ptunnel.png" title="">
|
||||
</li>
|
||||
|
||||
<h2>Android usage:</h2>
|
||||
<li>[ready] <strong>Provide</strong> help in a variety of languages.</li>
|
||||
|
||||
<p>Use the old version, on either an old version of Firefox(pre-68) or by enabling
|
||||
this custom collection: [Recommended Plugins] https://addons.mozilla.org/en-US/firefox/collections/14614396/I2P-Browser-Fork/</p>
|
||||
<li>[done] <strong>Monitor</strong> the health and readiness of the I2P router it is instructed to use. Currently the plugin checks whether the HTTP Proxy is working by fetching an image from "http://proxy.i2p" and displaying a result. A work-in-progress binding to i2pcontrol is available in ./i2pcontrol, it is inert at this time.</li>
|
||||
|
||||
<li><img alt="Visiting toopie.html" src="toopie.png" title="">
|
||||
</li>
|
||||
|
||||
<li>[Done] <strong>Handle</strong> router console applications under their own origins and within their own contextual identity. (1) The router console is automatically confined to it's own container tab. (2) Use a custom protocol handler to place each i2p application/plugin under it's own origin, shortening router console URL's and placing applications under their own origin.</li>
|
||||
|
||||
<li><img alt="Visiting routerconsole" src="routerconsole.png" title="">
|
||||
</li>
|
||||
|
||||
<li>[Done] <strong>Handle Torrents</strong> by talking to i2psnark-rpc plugin and then adding them directly into the Firefox downloads drop-downs, menus, etc. Enable the use of I2PSnark as a peer-to-peer delivery mechanism for media files.</li>
|
||||
|
||||
<li><img alt="Visiting i2psnark" src="i2psnark.png" title="">
|
||||
</li>
|
||||
|
||||
<li><img alt="Monitoring torrents" src="transmissionrpc.png" title="">
|
||||
</li>
|
||||
|
||||
<li>[Done] <strong>Enhance</strong> the I2P browsing experience by allowing site developers distribute some or all of their resources as torrents, allowing the torrents to be treated effectively as a CDN.</li>
|
||||
|
||||
<li><img alt="Distribute your site as a torrent." src="x-i2p-torrentlocation.png" title="">
|
||||
</li>
|
||||
|
||||
<li>[Done] <strong>Indicate</strong> the level of authenticity provided by TLS. TLS is optional on I2P for now, but some sites offer it anyway. TLS support is experimental and in the works.</li>
|
||||
|
||||
<li><img alt="Use HTTPS with your I2P Site." src="i2p-https.png" title="">
|
||||
</li>
|
||||
|
||||
<li>[Done] <strong>Provide</strong> alternate, in-I2P destinations for web sites that want to mirror their content within I2P.</li>
|
||||
|
||||
<li>[barely started] <strong>Isolate</strong> traffic by contextual identity to it's own HTTP Proxy tunnel, each reflecting it's own pseudonymous identity within I2P. The contextual identities. For now, the contextual identities used to manage browsing are "I2P Browsing" and "Web Browsing" where I2P Browsing is capable of using an outproxy but in the case of traffic destined for the clearnet does not do header rewriting, and Web Browsing falls back to the Proxy configured in Firefox. The I2P Browsing will be expanded to
|
||||
<ul>
|
||||
<li>I2P Amnesiac Browsing: Use for General Browsing, stores no history and uses an HTTP Proxy with a very short tunnel-close timeout and no key-reuse.</li>
|
||||
|
||||
<li>I2P Social Networking: Use this for logging into social network accounts, forums, and other interactive asynchronous public communication platforms where your identity is behaviorally linkable. This has a very long tunnel-close timeout and key-reuse until specifically invoked.</li>
|
||||
|
||||
<li>I2P Blogging: Use this for posting content to the web interface of your blog or to other similar websites that you create content on.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li><img alt="Visiting clearweb" src="clearweb.png" title="">
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3>Video</h3>
|
||||
|
||||
<ul>
|
||||
<li><img alt="Video of the plugin in action" src="i2psetproxy.js.gif" title="">
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2>Documents</h2>
|
||||
|
||||
<ul>
|
||||
<li><strong><a href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/download/docs/Browser.Design.Documentation.pdf">Browser Outline</a></strong>: This document is an outline of each of the browser extension's feature panels in presentation form.</li>
|
||||
|
||||
<li><strong><a href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/download/docs/Landing.Page.Documentation.pdf">Smart Lander Design</a></strong>: This is the original outline of the smart landing page which became the I2P home page within the browser and the drop-down control panel.</li>
|
||||
|
||||
<li><strong><a href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/wiki/Other-Extensions">Other extensions</a></strong>: and how they work with this one.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Super Extra Important Background Info:</h2>
|
||||
|
||||
<p>This plugin's viability is directly related to the viability of Mozilla and Tor's work on hardening Firefox itself and of particular interest are the "Uplift" and "Fusion(Firefox Using Onions)" projects.</p>
|
||||
|
||||
<h3>Links about Project Uplift</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<a href="https://wiki.mozilla.org/Security/Tor_Uplift">Tor Uplift</a> is a project which brings important features of the Tor Browser to the mainstream of Firefox users by including patches from Tor Browser Bundle into Firefox where it is appropriate.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="https://wiki.mozilla.org/Security/FirstPartyIsolation">First Party Isolation</a> is a feature in Firefox and other browsers which keeps information from leaking across first-party domains.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="https://wiki.mozilla.org/Security/Fingerprinting">Fingerprinting</a> is a technique where a tracker attempts to extract unique information about a user from a side-channel in order to create an identifier that can be used to correlate the user across many sites.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="https://wiki.mozilla.org/Security/Fennec%2BTor_Project">Fennec</a> is Firefox for Android and this link has some analysis of the privacy consequences of the Android platform.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="https://wiki.mozilla.org/Security/Tor_Uplift/Tracking">Tracking</a> in Firefox is surveyed here.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Project uplift seems to have largely been accomplished?</p>
|
||||
|
||||
<h3>Links about Project Fusion</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<a href="https://wiki.mozilla.org/Security/Fusion">Project Fusion</a> or Firefox using Onions is a joint Mozilla/Tor effort to create an enhanced Private Browsing mode for Firefox which uses Tor.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="https://trac.torproject.org/projects/tor/wiki/org/meetings/2018Rome/Notes/FusionProject">Notes</a> from a meeting about Fusion.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="https://blog.torproject.org/tor-heart-firefox">Tor at the Heart: Firefox</a> is a blog about Tor and the relationship they have to Firefox re: TBB, Fusion.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2>The <strong>Other</strong> Version</h2>
|
||||
|
||||
<p>New versions of this extension create an I2P in Private Browsing mode instead, using container tabs.</p>
|
||||
|
||||
<p>Since this is a drastic change to the behavior of the old plugin, and since there is no UI a new entry for the new plugin has been made at a new location on addons.mozilla.org.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>This is the new version: <a href="https://addons.mozilla.org/en-US/firefox/addon/i2p-in-private-browsing/">[link]</a></p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p>This is the old version: <a href="https://addons.mozilla.org/en-US/firefox/addon/I2P-Proxy/">[link]</a></p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2>Android usage:</h2>
|
||||
|
||||
<p>Use the old version, on either an old version of Firefox(pre-68) or by enabling this custom collection: [Recommended Plugins] https://addons.mozilla.org/en-US/firefox/collections/14614396/I2P-Browser-Fork/</p>
|
||||
</body>
|
||||
</html>
|
||||
|
19
info.js
19
info.js
@ -2,9 +2,9 @@ function checkPeerConnection() {
|
||||
let getting = browser.privacy.network.peerConnectionEnabled.get({});
|
||||
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;
|
||||
});
|
||||
}
|
||||
|
||||
@ -126,6 +126,9 @@ document.addEventListener("click", (clickEvent) => {
|
||||
} else if (clickEvent.target.id === "window-visit-torrent") {
|
||||
console.log("attempting to create torrent tab");
|
||||
goTorrent();
|
||||
} else if (clickEvent.target.id === "torrentui-opener") {
|
||||
console.log("attempting to create torrent tab");
|
||||
goSnark();
|
||||
} else if (clickEvent.target.id === "window-visit-help") {
|
||||
console.log("attempting to create torrent tab");
|
||||
goHelp();
|
||||
@ -225,9 +228,11 @@ function goHome() {
|
||||
}
|
||||
console.log("(bookmarks) adding home page bookmark");
|
||||
}
|
||||
console.log("(bookmarks) checking if we're running in an I2P Browser");
|
||||
var gettingProxyInfo = browser.proxy.settings.get({});
|
||||
gettingProxyInfo.then(gotProxyInfo);
|
||||
if (browser.windows != undefined) {
|
||||
console.log("(bookmarks) checking if we're running in an I2P Browser");
|
||||
var gettingProxyInfo = browser.proxy.settings.get({});
|
||||
gettingProxyInfo.then(gotProxyInfo);
|
||||
}
|
||||
}
|
||||
|
||||
function goIndex() {
|
||||
@ -285,7 +290,7 @@ function goSearch() {
|
||||
}
|
||||
let createData = {
|
||||
url:
|
||||
"http://yacy.idk.i2p/yacysearch.html?" +
|
||||
"http://legwork.i2p/yacysearch.html?" +
|
||||
"query=" +
|
||||
document.getElementById("search-query").value,
|
||||
};
|
||||
|
@ -1,12 +1,12 @@
|
||||
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);
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
{
|
||||
"applications": {
|
||||
"browser_specific_settings": {
|
||||
"gecko": {
|
||||
"id": "i2ppb@eyedeekay.github.io",
|
||||
"strict_min_version": "64.0"
|
||||
"strict_min_version": "91.1.0"
|
||||
}
|
||||
},
|
||||
"permissions": [
|
||||
@ -27,7 +27,7 @@
|
||||
],
|
||||
"manifest_version": 2,
|
||||
"name": "__MSG_extensionName__",
|
||||
"version": "0.107",
|
||||
"version": "0.130",
|
||||
"description": "__MSG_extensionDescription__",
|
||||
"homepage_url": "https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox",
|
||||
"icons": {
|
||||
|
@ -20,21 +20,20 @@
|
||||
</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>
|
||||
<span class="title">Bookmarks Status:</span> <input id="bookmarksState" name="bookmarksstate" type="checkbox" value="bookmarksstate"> <label for="bookmarksState">Bookmarks were created at install-time. <button id="bookmarksButton" type="submit">Re-Create Bookmarks</button></label>
|
||||
</section>
|
||||
|
||||
<section class="scheme-options proxy-options" id="proxy-options">
|
||||
<label for="bookmarksState"></label>
|
||||
<div class="title">
|
||||
Proxy Options
|
||||
<label for="bookmarksState">Proxy Options</label>
|
||||
</div>
|
||||
<p id="proxyHelpText">
|
||||
<label for="bookmarksState"></label>
|
||||
<p id="proxyHelpText"><label for="bookmarksState"></label>
|
||||
</p>
|
||||
<label id="portText">Host:</label> <input data="host" id="host" type="text" value="127.0.0.1">
|
||||
<label for="bookmarksState"><label id="portText">Host:</label> <input data="host" id="host" type="text" value="127.0.0.1">
|
||||
<br>
|
||||
<label id="hostText">Port:</label> <input data="port" id="port" type="text" value="4444">
|
||||
<label id="hostText">Port:</label> <input data="port" id="port" type="text" value="4444"></label>
|
||||
</section>
|
||||
<!--<section class="scheme-options identity-options">
|
||||
<div class="panel">
|
||||
@ -89,7 +88,7 @@
|
||||
</div>
|
||||
</section>
|
||||
<input id="save-button" type="button" value="Save preferences">
|
||||
<script src="options.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>
|
||||
|
@ -4,168 +4,168 @@ function SetBookButton() {
|
||||
}
|
||||
|
||||
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);
|
||||
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") {
|
||||
if (bookmarks_state.value == 'false') {
|
||||
return false;
|
||||
}
|
||||
if (bookmarks_state.value == "true") {
|
||||
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;
|
||||
}
|
||||
@ -173,88 +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["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"];
|
||||
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);
|
||||
@ -266,75 +266,75 @@ function checkStoredSettings(storedSettings) {
|
||||
|
||||
function checkAndroidStoredSettings(storedSettings) {
|
||||
let defaultSettings = {};
|
||||
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"];
|
||||
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;
|
||||
@ -346,85 +346,85 @@ function onError(e) {
|
||||
|
||||
function storeSettings() {
|
||||
let 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);
|
||||
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");
|
||||
const selectList = document.querySelector('#proxy_scheme');
|
||||
if (selectList != undefined) selectList.value = restoredSettings.proxy_scheme;
|
||||
//console.log("(options)showing proxy scheme:", selectList.value);
|
||||
|
||||
console.log(restoredSettings);
|
||||
const bms = document.getElementById("bookmarksState");
|
||||
const bms = document.getElementById('bookmarksState');
|
||||
if (bms != undefined) bms.checked = restoredSettings.bookmarks_state;
|
||||
|
||||
const hostitem = document.getElementById("host");
|
||||
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");
|
||||
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");
|
||||
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");
|
||||
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");
|
||||
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");
|
||||
const rpcpassitem = document.getElementById('rpcpass');
|
||||
if (rpcpassitem != undefined) rpcpassitem.value = restoredSettings.rpc_pass;
|
||||
//console.log("(options)showing rpc pass:");
|
||||
|
||||
const btrpchostitem = document.getElementById("btrpchost");
|
||||
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");
|
||||
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");
|
||||
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");
|
||||
const btrpcpassitem = document.getElementById('btrpcpass');
|
||||
if (btrpcpassitem != undefined)
|
||||
btrpcpassitem.value = restoredSettings.bt_rpc_pass;
|
||||
//console.log("(options)showing bt rpc pass:");
|
||||
@ -444,18 +444,18 @@ function onError(e) {
|
||||
|
||||
var gettingInfo = browser.runtime.getPlatformInfo();
|
||||
gettingInfo.then((got) => {
|
||||
if (got.os != "android") {
|
||||
chrome.storage.local.get(function (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);
|
||||
|
@ -2,19 +2,19 @@ var android = false;
|
||||
|
||||
var gettingInfo = browser.runtime.getPlatformInfo();
|
||||
gettingInfo.then((got) => {
|
||||
if (got.os == "android") {
|
||||
console.log("Running in Android detected");
|
||||
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;
|
||||
}
|
||||
|
47
privacy.js
47
privacy.js
@ -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,10 @@ 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);
|
||||
}
|
||||
@ -23,8 +23,8 @@ function disableHyperlinkAuditing() {
|
||||
// UNINSTALL ONLY
|
||||
function enableHyperlinkAuditing() {
|
||||
var setting = browser.privacy.websites.hyperlinkAuditingEnabled.clear();
|
||||
console.log("Disabling hyperlink auditing/val=", {
|
||||
value: false,
|
||||
console.log('Disabling hyperlink auditing/val=', {
|
||||
value: false
|
||||
});
|
||||
setting.then(onSet);
|
||||
}
|
||||
@ -32,10 +32,10 @@ function enableHyperlinkAuditing() {
|
||||
// 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);
|
||||
}
|
||||
@ -43,8 +43,8 @@ function enableFirstPartyIsolation() {
|
||||
// UNINSTALL ONLY
|
||||
function disableFirstPartyIsolation() {
|
||||
var setting = browser.privacy.websites.firstPartyIsolate.clear();
|
||||
console.log("Enabling first party isolation/val=", {
|
||||
value: true,
|
||||
console.log('Enabling first party isolation/val=', {
|
||||
value: true
|
||||
});
|
||||
setting.then(onSet);
|
||||
}
|
||||
@ -57,15 +57,15 @@ function disableEvilCookies() {
|
||||
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);
|
||||
});
|
||||
@ -446,10 +446,11 @@ function i2pHostName(url) {
|
||||
|
||||
function i2pHost(url) {
|
||||
let hostname = i2pHostName(url);
|
||||
if (hostname.endsWith(".i2p")) {
|
||||
console.log("(hostname) i2p", hostname);
|
||||
let postname = hostname.split(":")[0];
|
||||
if (postname.endsWith(".i2p")) {
|
||||
console.log("(hostname) i2p", postname);
|
||||
}
|
||||
return hostname.endsWith(".i2p");
|
||||
return postname.endsWith(".i2p");
|
||||
}
|
||||
|
||||
function onContextGotLog(contexts) {
|
||||
|
760
proxy.js
760
proxy.js
@ -1,407 +1,459 @@
|
||||
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");
|
||||
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');
|
||||
var torpref = chrome.i18n.getMessage('torPreface');
|
||||
var reseedpref = chrome.i18n.getMessage('reseedPreface');
|
||||
|
||||
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;
|
||||
return requestInfo.parentFrameId != -1;
|
||||
}
|
||||
|
||||
var handleContextProxyRequest = async function (requestDetails) {
|
||||
function ircProxy() {
|
||||
if (!requestDetails.url.includes("7669")) {
|
||||
proxy = {
|
||||
type: getScheme(),
|
||||
host: getHost(),
|
||||
port: getPort(),
|
||||
};
|
||||
return proxy;
|
||||
var handleContextProxyRequest = async function(requestDetails) {
|
||||
function ircProxy() {
|
||||
if (!requestDetails.url.includes('7669')) {
|
||||
proxy = {
|
||||
type: getScheme(),
|
||||
host: getHost(),
|
||||
port: getPort(),
|
||||
failoverTimeout: 864000
|
||||
};
|
||||
return proxy;
|
||||
}
|
||||
if (requestDetails.url.includes(':7669')) {
|
||||
proxy = null;
|
||||
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;
|
||||
function blogProxy() {
|
||||
if (!requestDetails.url.includes('8084')) {
|
||||
proxy = {
|
||||
type: getScheme(),
|
||||
host: getHost(),
|
||||
port: getPort(),
|
||||
failoverTimeout: 864000
|
||||
};
|
||||
return proxy;
|
||||
}
|
||||
if (requestDetails.url.includes(':8084')) {
|
||||
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;
|
||||
}
|
||||
function torManagerProxy() {
|
||||
if (!requestDetails.url.includes('7695')) {
|
||||
proxy = {
|
||||
type: getScheme(),
|
||||
host: getHost(),
|
||||
port: getPort(),
|
||||
failoverTimeout: 864000
|
||||
};
|
||||
return proxy;
|
||||
}
|
||||
if (requestDetails.url.includes(':7695')) {
|
||||
proxy = null;
|
||||
return proxy;
|
||||
}
|
||||
}
|
||||
|
||||
if (context != undefined) {
|
||||
console.log("(proxy), context", context);
|
||||
function reseedProxy() {
|
||||
if (!requestDetails.url.includes('7671')) {
|
||||
proxy = {
|
||||
type: getScheme(),
|
||||
host: getHost(),
|
||||
port: getPort(),
|
||||
failoverTimeout: 864000
|
||||
};
|
||||
return proxy;
|
||||
}
|
||||
if (requestDetails.url.includes(':7671')) {
|
||||
proxy = null;
|
||||
return proxy;
|
||||
}
|
||||
}
|
||||
|
||||
function btProxy() {
|
||||
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) {
|
||||
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;
|
||||
if (requestDetails.url.includes(':7662')) {
|
||||
proxy = null;
|
||||
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 = {
|
||||
console.log('(bt proxy)', proxy);
|
||||
return proxy;
|
||||
}
|
||||
|
||||
function mainProxy() {
|
||||
console.log('(proxy) mainproxy 0');
|
||||
proxy = {
|
||||
type: getScheme(),
|
||||
host: getHost(),
|
||||
port: getPort(),
|
||||
};
|
||||
} else {
|
||||
proxy = null;
|
||||
}
|
||||
if (requestDetails.url.includes("rpc")) {
|
||||
console.log("(proxy for rpc url)", rpc);
|
||||
}
|
||||
//var tab = tabGet(requestDetails.tabId);
|
||||
//tab.then(handleTabRequest,)
|
||||
return proxy;
|
||||
}
|
||||
};
|
||||
var contextGet = async function (tabInfo) {
|
||||
try {
|
||||
context = await browser.contextualIdentities.get(tabInfo.cookieStoreId);
|
||||
return context;
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
return "firefox-default";
|
||||
}
|
||||
};
|
||||
var tabGet = async function (tabId) {
|
||||
try {
|
||||
let tabInfo = await browser.tabs.get(tabId);
|
||||
return tabInfo;
|
||||
} catch (error) {
|
||||
console.log("(proxy)Tab error", error);
|
||||
}
|
||||
};
|
||||
if (proxyHost(requestDetails.url)) {
|
||||
proxy = {
|
||||
type: getScheme(),
|
||||
host: getHost(),
|
||||
port: getPort(),
|
||||
};
|
||||
return proxy;
|
||||
}
|
||||
if (requestDetails.originUrl == browser.runtime.getURL("security.html")) {
|
||||
proxy = {
|
||||
type: getScheme(),
|
||||
host: getHost(),
|
||||
port: getPort(),
|
||||
};
|
||||
return proxy;
|
||||
}
|
||||
if (
|
||||
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(),
|
||||
failoverTimeout: 864000
|
||||
};
|
||||
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;
|
||||
} 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);
|
||||
return proxy;
|
||||
} else if (extensionHost(requestDetails)) {
|
||||
return;
|
||||
} else {
|
||||
var tab = tabGet(requestDetails.tabId);
|
||||
var context = tab.then(contextGet);
|
||||
var proxy = await context.then(handleProxyRequest);
|
||||
//console.log("(proxy)Returning I2P Proxy", proxy);
|
||||
return proxy;
|
||||
}
|
||||
/*proxy = {};
|
||||
console.log("(proxy)Returning unset Proxy", proxy);
|
||||
return proxy;*/
|
||||
} 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);
|
||||
}
|
||||
};
|
||||
|
||||
function routerProxy() {
|
||||
if (routerHost(requestDetails.url)) {
|
||||
proxy = null;
|
||||
return proxy;
|
||||
} else if (!routerHost(requestDetails.url)) {
|
||||
proxy = {
|
||||
type: getScheme(),
|
||||
host: getHost(),
|
||||
port: getPort(),
|
||||
failoverTimeout: 864000
|
||||
};
|
||||
return proxy;
|
||||
}
|
||||
}
|
||||
try {
|
||||
var handleProxyRequest = function(context) {
|
||||
proxy = {
|
||||
type: getScheme(),
|
||||
host: getHost(),
|
||||
port: getPort(),
|
||||
failoverTimeout: 864000
|
||||
};
|
||||
|
||||
if (context == 'firefox-default' || context == 'firefox-private') {
|
||||
proxy = null;
|
||||
return proxy;
|
||||
}
|
||||
|
||||
if (context != undefined) {
|
||||
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 == torpref) {
|
||||
proxy = torManagerProxy();
|
||||
return proxy;
|
||||
} else if (context.name == reseedpref) {
|
||||
proxy = reseedProxy();
|
||||
return proxy;
|
||||
} else if (context.name == routerpref) {
|
||||
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(),
|
||||
failoverTimeout: 864000
|
||||
};
|
||||
} else {
|
||||
proxy = null;
|
||||
}
|
||||
if (requestDetails.url.includes('rpc')) {
|
||||
console.log('(proxy for rpc url)', rpc);
|
||||
}
|
||||
//var tab = tabGet(requestDetails.tabId);
|
||||
//tab.then(handleTabRequest,)
|
||||
return proxy;
|
||||
}
|
||||
};
|
||||
var contextGet = async function(tabInfo) {
|
||||
try {
|
||||
context = await browser.contextualIdentities.get(tabInfo.cookieStoreId);
|
||||
return context;
|
||||
} catch (error) {
|
||||
console.warn(error);
|
||||
return 'firefox-default';
|
||||
}
|
||||
};
|
||||
var tabGet = async function(tabId) {
|
||||
try {
|
||||
let tabInfo = await browser.tabs.get(tabId);
|
||||
return tabInfo;
|
||||
} catch (error) {
|
||||
console.log('(proxy)Tab error', error);
|
||||
}
|
||||
};
|
||||
if (proxyHost(requestDetails.url)) {
|
||||
proxy = {
|
||||
type: getScheme(),
|
||||
host: getHost(),
|
||||
port: getPort(),
|
||||
failoverTimeout: 864000
|
||||
};
|
||||
return proxy;
|
||||
}
|
||||
if (requestDetails.originUrl == browser.runtime.getURL('security.html')) {
|
||||
proxy = {
|
||||
type: getScheme(),
|
||||
host: getHost(),
|
||||
port: getPort(),
|
||||
failoverTimeout: 864000
|
||||
};
|
||||
return proxy;
|
||||
}
|
||||
if (
|
||||
requestDetails.cookieStoreId == 'firefox-default' ||
|
||||
requestDetails.cookieStoreId == 'firefox-private'
|
||||
) {
|
||||
if (browser.windows != undefined) {
|
||||
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()
|
||||
};
|
||||
return proxy;
|
||||
} 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);
|
||||
return proxy;
|
||||
} else if (extensionHost(requestDetails)) {
|
||||
return;
|
||||
} else {
|
||||
var tab = tabGet(requestDetails.tabId);
|
||||
var context = tab.then(contextGet);
|
||||
var proxy = await context.then(handleProxyRequest);
|
||||
//console.log("(proxy)Returning I2P Proxy", proxy);
|
||||
return proxy;
|
||||
}
|
||||
/*proxy = {};
|
||||
console.log("(proxy)Returning unset Proxy", proxy);
|
||||
return proxy;*/
|
||||
} else {
|
||||
proxy = {
|
||||
type: getScheme(),
|
||||
host: getHost(),
|
||||
port: getPort(),
|
||||
failoverTimeout: 864000
|
||||
};
|
||||
//console.log('(proxy for rpc url)', rpc);
|
||||
return proxy;
|
||||
}
|
||||
} catch (error) {
|
||||
console.log('(proxy)Not using I2P Proxy.', error);
|
||||
}
|
||||
}
|
||||
|
||||
function SetupSettings() {
|
||||
console.log("Initialising Settings");
|
||||
function onSetupError() {
|
||||
console.log("Settings initialization error");
|
||||
}
|
||||
//
|
||||
function checkSchemeStoredSettings(storedSettings) {
|
||||
if (storedSettings.proxy_scheme == undefined)
|
||||
storedSettings.proxy_scheme = "http";
|
||||
else proxy_scheme = storedSettings.proxy_scheme;
|
||||
console.log('Initialising Settings');
|
||||
|
||||
console.log("Initialising Proxy Scheme", storedSettings.proxy_scheme);
|
||||
setupProxy();
|
||||
}
|
||||
var gettingSchemeStoredSettings = browser.storage.local.get("proxy_scheme");
|
||||
gettingSchemeStoredSettings.then(checkSchemeStoredSettings, onSetupError);
|
||||
function onSetupError() {
|
||||
console.log('Settings initialization error');
|
||||
}
|
||||
//
|
||||
function checkSchemeStoredSettings(storedSettings) {
|
||||
if (storedSettings.proxy_scheme == undefined)
|
||||
storedSettings.proxy_scheme = 'http';
|
||||
else proxy_scheme = storedSettings.proxy_scheme;
|
||||
|
||||
//
|
||||
function checkHostStoredSettings(storedSettings) {
|
||||
if (storedSettings.proxy_host == undefined)
|
||||
storedSettings.proxy_host = "127.0.0.1";
|
||||
else proxy_host = storedSettings.proxy_host;
|
||||
console.log('Initialising Proxy Scheme', storedSettings.proxy_scheme);
|
||||
setupProxy();
|
||||
}
|
||||
var gettingSchemeStoredSettings = browser.storage.local.get('proxy_scheme');
|
||||
gettingSchemeStoredSettings.then(checkSchemeStoredSettings, onSetupError);
|
||||
|
||||
console.log("Initialising Host", storedSettings.proxy_host);
|
||||
setupProxy();
|
||||
}
|
||||
var gettingHostStoredSettings = browser.storage.local.get("proxy_host");
|
||||
gettingHostStoredSettings.then(checkHostStoredSettings, onSetupError);
|
||||
//
|
||||
function checkHostStoredSettings(storedSettings) {
|
||||
if (storedSettings.proxy_host == undefined)
|
||||
storedSettings.proxy_host = '127.0.0.1';
|
||||
else proxy_host = storedSettings.proxy_host;
|
||||
|
||||
//
|
||||
function checkPortStoredSettings(storedSettings) {
|
||||
if (storedSettings.proxy_port == undefined)
|
||||
storedSettings.proxy_port = "4444";
|
||||
else proxy_port = storedSettings.proxy_port;
|
||||
console.log('Initialising Host', storedSettings.proxy_host);
|
||||
setupProxy();
|
||||
}
|
||||
var gettingHostStoredSettings = browser.storage.local.get('proxy_host');
|
||||
gettingHostStoredSettings.then(checkHostStoredSettings, onSetupError);
|
||||
|
||||
console.log("Initialising Port", storedSettings.proxy_port);
|
||||
setupProxy();
|
||||
}
|
||||
var gettingPortStoredSettings = browser.storage.local.get("proxy_port");
|
||||
gettingPortStoredSettings.then(checkPortStoredSettings, onSetupError);
|
||||
//
|
||||
function checkPortStoredSettings(storedSettings) {
|
||||
if (storedSettings.proxy_port == undefined)
|
||||
storedSettings.proxy_port = '4444';
|
||||
else proxy_port = storedSettings.proxy_port;
|
||||
|
||||
//
|
||||
function checkControlHostStoredSettings(storedSettings) {
|
||||
if (storedSettings.control_host == undefined)
|
||||
storedSettings.control_host = "127.0.0.1";
|
||||
else control_host = storedSettings.control_host;
|
||||
console.log('Initialising Port', storedSettings.proxy_port);
|
||||
setupProxy();
|
||||
}
|
||||
var gettingPortStoredSettings = browser.storage.local.get('proxy_port');
|
||||
gettingPortStoredSettings.then(checkPortStoredSettings, onSetupError);
|
||||
|
||||
console.log("Initialising Control Host", storedSettings.control_host);
|
||||
setupProxy();
|
||||
}
|
||||
var gettingControlHostStoredSettings = browser.storage.local.get(
|
||||
"control_host"
|
||||
);
|
||||
gettingControlHostStoredSettings.then(
|
||||
checkControlHostStoredSettings,
|
||||
onSetupError
|
||||
);
|
||||
//
|
||||
function checkControlHostStoredSettings(storedSettings) {
|
||||
if (storedSettings.control_host == undefined)
|
||||
storedSettings.control_host = '127.0.0.1';
|
||||
else control_host = storedSettings.control_host;
|
||||
|
||||
//
|
||||
function checkControlPortStoredSettings(storedSettings) {
|
||||
if (storedSettings.control_port == undefined)
|
||||
storedSettings.control_port = "7657";
|
||||
else control_port = storedSettings.control_port;
|
||||
|
||||
console.log("Initialising Control Port", storedSettings.control_port);
|
||||
setupProxy();
|
||||
}
|
||||
var gettingControlPortStoredSettings = browser.storage.local.get(
|
||||
"control_port"
|
||||
);
|
||||
gettingControlPortStoredSettings.then(
|
||||
checkControlPortStoredSettings,
|
||||
onSetupError
|
||||
);
|
||||
|
||||
//
|
||||
function checkHistoryStoredSettings(storedSettings) {
|
||||
if (storedSettings.disable_history == undefined)
|
||||
storedSettings.disable_history = false;
|
||||
else disable_history = storedSettings.disable_history;
|
||||
|
||||
console.log(
|
||||
"Initialising Disabled History",
|
||||
storedSettings.disable_history
|
||||
console.log('Initialising Control Host', storedSettings.control_host);
|
||||
setupProxy();
|
||||
}
|
||||
var gettingControlHostStoredSettings =
|
||||
browser.storage.local.get('control_host');
|
||||
gettingControlHostStoredSettings.then(
|
||||
checkControlHostStoredSettings,
|
||||
onSetupError
|
||||
);
|
||||
setupProxy();
|
||||
}
|
||||
var gettingHistoryStoredSettings = browser.storage.local.get(
|
||||
"disable_history"
|
||||
);
|
||||
gettingHistoryStoredSettings.then(checkHistoryStoredSettings, onSetupError);
|
||||
|
||||
//
|
||||
function checkControlPortStoredSettings(storedSettings) {
|
||||
if (storedSettings.control_port == undefined)
|
||||
storedSettings.control_port = '7657';
|
||||
else control_port = storedSettings.control_port;
|
||||
|
||||
console.log('Initialising Control Port', storedSettings.control_port);
|
||||
setupProxy();
|
||||
}
|
||||
var gettingControlPortStoredSettings =
|
||||
browser.storage.local.get('control_port');
|
||||
gettingControlPortStoredSettings.then(
|
||||
checkControlPortStoredSettings,
|
||||
onSetupError
|
||||
);
|
||||
|
||||
//
|
||||
function checkHistoryStoredSettings(storedSettings) {
|
||||
if (storedSettings.disable_history == undefined)
|
||||
storedSettings.disable_history = false;
|
||||
else disable_history = storedSettings.disable_history;
|
||||
|
||||
console.log(
|
||||
'Initialising Disabled History',
|
||||
storedSettings.disable_history
|
||||
);
|
||||
setupProxy();
|
||||
}
|
||||
var gettingHistoryStoredSettings =
|
||||
browser.storage.local.get('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";
|
||||
}
|
||||
return proxy_host;
|
||||
if (proxy_host == undefined) {
|
||||
proxy_host = '127.0.0.1';
|
||||
}
|
||||
return proxy_host;
|
||||
}
|
||||
|
||||
function getPort() {
|
||||
if (proxy_port == undefined) {
|
||||
var scheme = getScheme();
|
||||
if (scheme == "socks") proxy_port = "4446";
|
||||
else proxy_port = "4444";
|
||||
}
|
||||
return proxy_port;
|
||||
if (proxy_port == undefined) {
|
||||
var scheme = getScheme();
|
||||
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;
|
||||
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");
|
||||
browser.proxy.onRequest.addListener(handleContextProxyRequest, {
|
||||
urls: ["<all_urls>"],
|
||||
});
|
||||
console.log("i2p settings created for WebExtension Proxy");
|
||||
console.log('Setting up Firefox WebExtension proxy');
|
||||
browser.proxy.onRequest.addListener(handleContextProxyRequest, {
|
||||
urls: ['<all_urls>']
|
||||
});
|
||||
console.log('i2p settings created for WebExtension Proxy');
|
||||
}
|
||||
|
||||
function update() {
|
||||
console.log("restoring proxy scheme:", proxy_scheme);
|
||||
console.log("restoring proxy host:", proxy_host);
|
||||
console.log("restoring proxy port:", proxy_port);
|
||||
console.log("restoring control host:", control_host);
|
||||
console.log("restoring control port:", control_port);
|
||||
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 () {
|
||||
SetupSettings();
|
||||
update();
|
||||
setupProxy();
|
||||
});
|
||||
console.log('updating settings from storage');
|
||||
chrome.storage.local.get(function() {
|
||||
SetupSettings();
|
||||
update();
|
||||
setupProxy();
|
||||
});
|
||||
}
|
||||
|
||||
updateFromStorage();
|
||||
@ -411,9 +463,11 @@ setupProxy();
|
||||
|
||||
var gettingListenerInfo = browser.runtime.getPlatformInfo();
|
||||
gettingListenerInfo.then((got) => {
|
||||
browser.windows.onCreated.addListener(() => {
|
||||
chrome.storage.local.get(function () {
|
||||
setupProxy();
|
||||
});
|
||||
});
|
||||
});
|
||||
if (browser.windows != undefined) {
|
||||
browser.windows.onCreated.addListener(() => {
|
||||
chrome.storage.local.get(function() {
|
||||
setupProxy();
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
@ -1,7 +1,7 @@
|
||||
browser.runtime.onMessage.addListener((request) => {
|
||||
var response = "no-alt-location";
|
||||
var response = 'no-alt-location';
|
||||
console.log(request);
|
||||
if (request.req === "i2p-location") {
|
||||
if (request.req === 'i2p-location') {
|
||||
var tag = document.querySelector('meta[http-equiv="i2p-location"]');
|
||||
if (tag != undefined) {
|
||||
console.log(tag);
|
||||
@ -13,7 +13,7 @@ browser.runtime.onMessage.addListener((request) => {
|
||||
if (tag) response = tag.content;
|
||||
}
|
||||
}
|
||||
if (request.req === "i2p-torrentlocation") {
|
||||
if (request.req === 'i2p-torrentlocation') {
|
||||
var tag = document.querySelector('meta[http-equiv="i2p-torrentlocation"]');
|
||||
if (tag != undefined) {
|
||||
console.log(tag);
|
||||
|
@ -1,12 +1,12 @@
|
||||
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);
|
||||
}
|
||||
|
@ -1,219 +1,218 @@
|
||||
"use strict";
|
||||
'use strict';
|
||||
|
||||
////// Session extraction
|
||||
|
||||
function setupExtractor() {
|
||||
browser.webRequest.onHeadersReceived.removeListener(extractSession);
|
||||
browser.storage.local.get("server").then(({ server }) => {
|
||||
if (!server) {
|
||||
return;
|
||||
}
|
||||
console.log("Session extractor setup for", server.base_url);
|
||||
browser.webRequest.onBeforeSendHeaders.addListener(
|
||||
extractSession,
|
||||
{ urls: [server.base_url + "*"] },
|
||||
["requestHeaders"]
|
||||
);
|
||||
});
|
||||
browser.webRequest.onHeadersReceived.removeListener(extractSession);
|
||||
browser.storage.local.get('server').then(({ server }) => {
|
||||
if (!server) {
|
||||
return;
|
||||
}
|
||||
console.log('Session extractor setup for', server.base_url);
|
||||
browser.webRequest.onBeforeSendHeaders.addListener(
|
||||
extractSession, { urls: [server.base_url + '*'] }, ['requestHeaders']
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
setupExtractor();
|
||||
|
||||
function extractSession(requestDetails) {
|
||||
const hdr = requestDetails.requestHeaders.filter(
|
||||
(x) => x.name.toLowerCase() === "x-transmission-session-id"
|
||||
)[0];
|
||||
if (!hdr) {
|
||||
return;
|
||||
}
|
||||
browser.storage.local.get("server").then(({ server }) => {
|
||||
server.session = hdr.value;
|
||||
browser.storage.local.set({ server });
|
||||
});
|
||||
const hdr = requestDetails.requestHeaders.filter(
|
||||
(x) => x.name.toLowerCase() === "x-transmission-session-id"
|
||||
)[0];
|
||||
if (!hdr) {
|
||||
return;
|
||||
}
|
||||
browser.storage.local.get("server").then(({ server }) => {
|
||||
server.session = hdr.value;
|
||||
browser.storage.local.set({ server });
|
||||
});
|
||||
}
|
||||
|
||||
////// Adding
|
||||
|
||||
function blobToBase64(blob) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const rdr = new FileReader();
|
||||
rdr.onload = () => resolve(rdr.result.substr(rdr.result.indexOf(",") + 1));
|
||||
rdr.onerror = reject;
|
||||
rdr.readAsDataURL(blob);
|
||||
});
|
||||
return new Promise((resolve, reject) => {
|
||||
const rdr = new FileReader();
|
||||
rdr.onload = () => resolve(rdr.result.substr(rdr.result.indexOf(",") + 1));
|
||||
rdr.onerror = reject;
|
||||
rdr.readAsDataURL(blob);
|
||||
});
|
||||
}
|
||||
|
||||
function addUrl(torrentUrl, downloadDir) {
|
||||
let p,
|
||||
params = {};
|
||||
if (downloadDir) {
|
||||
params = { "download-dir": downloadDir };
|
||||
}
|
||||
if (torrentUrl.startsWith("magnet:")) {
|
||||
console.log("Adding magnet", torrentUrl);
|
||||
params.filename = torrentUrl;
|
||||
p = rpcCall("torrent-add", params);
|
||||
} else {
|
||||
// Download the torrent file *in the browser* to support private torrents
|
||||
console.log("Downloading torrent", torrentUrl);
|
||||
p = fetch(torrentUrl, {
|
||||
method: "GET",
|
||||
credentials: "include",
|
||||
})
|
||||
.then((resp) => {
|
||||
if (resp.ok) {
|
||||
return resp.blob();
|
||||
}
|
||||
throw new Error("Could not download torrent");
|
||||
})
|
||||
.then(blobToBase64)
|
||||
.then((b64) => {
|
||||
params.metainfo = b64;
|
||||
return rpcCall("torrent-add", params);
|
||||
});
|
||||
}
|
||||
return p.then((x) => {
|
||||
updateBadge();
|
||||
return x;
|
||||
});
|
||||
let p,
|
||||
params = {};
|
||||
if (downloadDir) {
|
||||
params = { "download-dir": downloadDir };
|
||||
}
|
||||
if (torrentUrl.startsWith("magnet:")) {
|
||||
console.log("Adding magnet", torrentUrl);
|
||||
params.filename = torrentUrl;
|
||||
p = rpcCall("torrent-add", params);
|
||||
} else {
|
||||
// Download the torrent file *in the browser* to support private torrents
|
||||
console.log("Downloading torrent", torrentUrl);
|
||||
p = fetch(torrentUrl, {
|
||||
method: "GET",
|
||||
credentials: "include",
|
||||
})
|
||||
.then((resp) => {
|
||||
if (resp.ok) {
|
||||
return resp.blob();
|
||||
}
|
||||
throw new Error("Could not download torrent");
|
||||
})
|
||||
.then(blobToBase64)
|
||||
.then((b64) => {
|
||||
params.metainfo = b64;
|
||||
return rpcCall("torrent-add", params);
|
||||
});
|
||||
}
|
||||
return p.then((x) => {
|
||||
updateBadge();
|
||||
return x;
|
||||
});
|
||||
}
|
||||
|
||||
////// magnet: Handler
|
||||
|
||||
function handleUrl(requestDetails) {
|
||||
return addUrl(
|
||||
decodeURIComponent(
|
||||
requestDetails.url.replace("http://transmitter.web-extension/", "")
|
||||
)
|
||||
).then((x) => {
|
||||
return browser.storage.local.get("server").then(({ server }) => {
|
||||
return { redirectUrl: server.base_url + "web/" };
|
||||
return addUrl(
|
||||
decodeURIComponent(
|
||||
requestDetails.url.replace("http://transmitter.web-extension/", "")
|
||||
)
|
||||
).then((x) => {
|
||||
return browser.storage.local.get("server").then(({ server }) => {
|
||||
return { redirectUrl: server.base_url + "web/" };
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
browser.webRequest.onBeforeRequest.addListener(
|
||||
handleUrl,
|
||||
{ urls: ["http://transmitter.web-extension/*"] },
|
||||
["blocking"]
|
||||
handleUrl, { urls: ["http://transmitter.web-extension/*"] }, ["blocking"]
|
||||
);
|
||||
|
||||
////// Context menu
|
||||
|
||||
function createContextMenu() {
|
||||
browser.storage.local.get("server").then(({ server }) => {
|
||||
browser.contextMenus.removeAll();
|
||||
if (!server || !server.locations || !server.locations.length) {
|
||||
browser.contextMenus.create({
|
||||
id: "transmitter-add",
|
||||
title: "Download with Transmission remote",
|
||||
contexts: ["link"],
|
||||
});
|
||||
} else {
|
||||
browser.contextMenus.create({
|
||||
id: "transmitter-add",
|
||||
title: "Download to Default location",
|
||||
contexts: ["link"],
|
||||
});
|
||||
server.locations.forEach((location) => {
|
||||
browser.contextMenus.create({
|
||||
id: "transmitter-add-loc-" + location.index,
|
||||
title: "Download to " + location.name,
|
||||
contexts: ["link"],
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
browser.storage.local.get("server").then(({ server }) => {
|
||||
browser.contextMenus.removeAll();
|
||||
if (!server || !server.locations || !server.locations.length) {
|
||||
browser.contextMenus.create({
|
||||
id: "transmitter-add",
|
||||
title: "Download with Transmission remote",
|
||||
contexts: ["link"],
|
||||
});
|
||||
} else {
|
||||
browser.contextMenus.create({
|
||||
id: "transmitter-add",
|
||||
title: "Download to Default location",
|
||||
contexts: ["link"],
|
||||
});
|
||||
server.locations.forEach((location) => {
|
||||
browser.contextMenus.create({
|
||||
id: "transmitter-add-loc-" + location.index,
|
||||
title: "Download to " + location.name,
|
||||
contexts: ["link"],
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
createContextMenu();
|
||||
if (browser.windows != undefined) {
|
||||
createContextMenu();
|
||||
|
||||
browser.contextMenus.onClicked.addListener((info, tab) => {
|
||||
if (info.menuItemId === "transmitter-add") {
|
||||
return addUrl(info.linkUrl);
|
||||
} else if (info.menuItemId.startsWith("transmitter-add-loc-")) {
|
||||
let index = parseInt(info.menuItemId.substr("transmitter-add-loc-".length));
|
||||
browser.storage.local.get("server").then(({ server }) => {
|
||||
let path = server.locations[index].path;
|
||||
addUrl(info.linkUrl, path);
|
||||
browser.contextMenus.onClicked.addListener((info, tab) => {
|
||||
if (info.menuItemId === "transmitter-add") {
|
||||
return addUrl(info.linkUrl);
|
||||
} else if (info.menuItemId.startsWith("transmitter-add-loc-")) {
|
||||
let index = parseInt(
|
||||
info.menuItemId.substr("transmitter-add-loc-".length)
|
||||
);
|
||||
browser.storage.local.get("server").then(({ server }) => {
|
||||
let path = server.locations[index].path;
|
||||
addUrl(info.linkUrl, path);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
////// Badge
|
||||
|
||||
function updateBadge() {
|
||||
browser.storage.local.get("server").then(({ server }) => {
|
||||
if (
|
||||
server.badge !== "num" &&
|
||||
server.badge !== "dl" &&
|
||||
server.badge !== "ul" &&
|
||||
server.badge !== "auto"
|
||||
) {
|
||||
return;
|
||||
}
|
||||
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,
|
||||
});
|
||||
break;
|
||||
case "dl":
|
||||
browser.browserAction.setBadgeBackgroundColor({ color: "green" });
|
||||
browser.browserAction.setBadgeText({
|
||||
text: formatSpeed(args.downloadSpeed),
|
||||
});
|
||||
break;
|
||||
case "ul":
|
||||
browser.browserAction.setBadgeBackgroundColor({ color: "blue" });
|
||||
browser.browserAction.setBadgeText({
|
||||
text: formatSpeed(args.uploadSpeed),
|
||||
});
|
||||
break;
|
||||
case "auto":
|
||||
if (args.downloadSpeed > 0) {
|
||||
browser.browserAction.setBadgeBackgroundColor({ color: "green" });
|
||||
browser.browserAction.setBadgeText({
|
||||
text: formatSpeed(args.downloadSpeed),
|
||||
});
|
||||
} else if (args.uploadSpeed > 0) {
|
||||
browser.browserAction.setBadgeBackgroundColor({ color: "blue" });
|
||||
browser.browserAction.setBadgeText({
|
||||
text: formatSpeed(args.uploadSpeed),
|
||||
});
|
||||
} else {
|
||||
browser.browserAction.setBadgeBackgroundColor({ color: "gray" });
|
||||
browser.browserAction.setBadgeText({
|
||||
text: "" + args.activeTorrentCount,
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
browser.storage.local.get("server").then(({ server }) => {
|
||||
if (
|
||||
server.badge !== "num" &&
|
||||
server.badge !== "dl" &&
|
||||
server.badge !== "ul" &&
|
||||
server.badge !== "auto"
|
||||
) {
|
||||
return;
|
||||
}
|
||||
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,
|
||||
});
|
||||
break;
|
||||
case "dl":
|
||||
browser.browserAction.setBadgeBackgroundColor({ color: "green" });
|
||||
browser.browserAction.setBadgeText({
|
||||
text: formatSpeed(args.downloadSpeed),
|
||||
});
|
||||
break;
|
||||
case "ul":
|
||||
browser.browserAction.setBadgeBackgroundColor({ color: "blue" });
|
||||
browser.browserAction.setBadgeText({
|
||||
text: formatSpeed(args.uploadSpeed),
|
||||
});
|
||||
break;
|
||||
case "auto":
|
||||
if (args.downloadSpeed > 0) {
|
||||
browser.browserAction.setBadgeBackgroundColor({ color: "green" });
|
||||
browser.browserAction.setBadgeText({
|
||||
text: formatSpeed(args.downloadSpeed),
|
||||
});
|
||||
} else if (args.uploadSpeed > 0) {
|
||||
browser.browserAction.setBadgeBackgroundColor({ color: "blue" });
|
||||
browser.browserAction.setBadgeText({
|
||||
text: formatSpeed(args.uploadSpeed),
|
||||
});
|
||||
} else {
|
||||
browser.browserAction.setBadgeBackgroundColor({ color: "gray" });
|
||||
browser.browserAction.setBadgeText({
|
||||
text: "" + args.activeTorrentCount,
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
browser.alarms.onAlarm.addListener((alarm) => {
|
||||
if (alarm.name === "transmitter-badge-update") {
|
||||
return updateBadge();
|
||||
}
|
||||
if (alarm.name === "transmitter-badge-update") {
|
||||
return updateBadge();
|
||||
}
|
||||
});
|
||||
|
||||
function setupBadge() {
|
||||
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"),
|
||||
});
|
||||
updateBadge();
|
||||
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"),
|
||||
});
|
||||
updateBadge();
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
setupBadge();
|
||||
@ -221,27 +220,26 @@ setupBadge();
|
||||
////// Storage updates
|
||||
|
||||
browser.storage.onChanged.addListener((changes, area) => {
|
||||
if (!Object.keys(changes).includes("server")) {
|
||||
return;
|
||||
}
|
||||
const oldv = changes.server.oldValue;
|
||||
const newv = changes.server.newValue;
|
||||
if (
|
||||
!oldv ||
|
||||
oldv.base_url !== newv.base_url ||
|
||||
oldv.username !== newv.username ||
|
||||
oldv.password !== newv.password ||
|
||||
oldv.badge_interval !== newv.badge_interval ||
|
||||
oldv.badge !== newv.badge ||
|
||||
arraysEqualDeep(oldv.locations, newv.locations)
|
||||
) {
|
||||
setupExtractor();
|
||||
setupBadge();
|
||||
updateBadge();
|
||||
createContextMenu();
|
||||
}
|
||||
if (!Object.keys(changes).includes("server")) {
|
||||
return;
|
||||
}
|
||||
const oldv = changes.server.oldValue;
|
||||
const newv = changes.server.newValue;
|
||||
if (!oldv ||
|
||||
oldv.base_url !== newv.base_url ||
|
||||
oldv.username !== newv.username ||
|
||||
oldv.password !== newv.password ||
|
||||
oldv.badge_interval !== newv.badge_interval ||
|
||||
oldv.badge !== newv.badge ||
|
||||
arraysEqualDeep(oldv.locations, newv.locations)
|
||||
) {
|
||||
setupExtractor();
|
||||
setupBadge();
|
||||
updateBadge();
|
||||
createContextMenu();
|
||||
}
|
||||
});
|
||||
|
||||
function arraysEqualDeep(arr1, arr2) {
|
||||
return JSON.stringify(arr1) !== JSON.stringify(arr2);
|
||||
}
|
||||
return JSON.stringify(arr1) !== JSON.stringify(arr2);
|
||||
}
|
@ -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';
|
||||
}
|
||||
|
@ -1,27 +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.bt_rpc_pass !== "") {
|
||||
myHeaders["Authorization"] =
|
||||
"Basic " +
|
||||
btoa((server.username || "") + ":" + (server.bt_rpc_pass || ""));
|
||||
console.log('(torrent) session', server.session);
|
||||
if (server.username !== '' || server.bt_rpc_pass !== '') {
|
||||
myHeaders['Authorization'] =
|
||||
'Basic ' +
|
||||
btoa((server.username || '') + ':' + (server.bt_rpc_pass || ''));
|
||||
}
|
||||
|
||||
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",
|
||||
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) {
|
||||
@ -37,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();
|
||||
});
|
||||
}
|
||||
|
@ -29,8 +29,8 @@
|
||||
|
||||
<div class="topnav">
|
||||
<a class="applicationName window-visit-homepage" href="#" id="window-visit-homepage" target="_blank">Home Page</a>
|
||||
<form action="http://yacy.idk.i2p/yacysearch.html?" method="get">
|
||||
<input id="search-query" name="query" placeholder="Search on yacy.idk.i2p(Opens a new tab)" type="search"> <input id="search-submit" text="Submit" type="submit">
|
||||
<form action="http://legwork.i2p/yacysearch.html?" method="get">
|
||||
<input id="search-query" name="query" placeholder="Search on legwork.i2p(Opens a new tab)" type="search"> <input id="search-submit" text="Submit" type="submit">
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@ -113,7 +113,7 @@
|
||||
<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>.
|
||||
<a class="torrent-opener" href="#" id="window-visit-torrent">For assistance, visit the torrent help page</a>.
|
||||
<br>
|
||||
<a class="config-opener" href="#">Open the settings</a> to continue.
|
||||
</div>
|
||||
@ -121,7 +121,7 @@
|
||||
<div id="torrents-pane">
|
||||
<header>
|
||||
<h1>Torrent Controls</h1>
|
||||
<a class="webui-opener" href="#" target="_blank"><img alt="Open Web UI" src="images/i2plogo.png"></a> <!--<a class="config-opener" href="#">
|
||||
<img alt="Open WebUI" src="icons/i2plogo.png"> <a class="webui-opener" href="#" id="torrentui-opener">Open WebUI</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="images/info.svg"></a>-->
|
||||
|
Reference in New Issue
Block a user