mirror of
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git
synced 2025-10-14 05:11:19 -04:00
The only place it was used was in window.onpageunload, and we have a better way of determining if the proxy is active there (through the ui). I also removed that code from the webextension since the proxy won't stop running unless you close the browser and after testing it looks like that code doesn't notify the user anyway.
125 lines
3 KiB
JavaScript
125 lines
3 KiB
JavaScript
/* global TESTING, Util, Params, Config, UI, Broker, Snowflake */
|
|
|
|
/*
|
|
UI
|
|
*/
|
|
|
|
class DebugUI extends UI {
|
|
|
|
constructor() {
|
|
super();
|
|
// Setup other DOM handlers if it's debug mode.
|
|
this.$status = document.getElementById('status');
|
|
this.$msglog = document.getElementById('msglog');
|
|
this.$msglog.value = '';
|
|
}
|
|
|
|
// Status bar
|
|
setStatus(msg) {
|
|
var txt;
|
|
txt = document.createTextNode('Status: ' + msg);
|
|
while (this.$status.firstChild) {
|
|
this.$status.removeChild(this.$status.firstChild);
|
|
}
|
|
return this.$status.appendChild(txt);
|
|
}
|
|
|
|
setActive(connected) {
|
|
super.setActive(connected);
|
|
return this.$msglog.className = connected ? 'active' : '';
|
|
}
|
|
|
|
log(msg) {
|
|
// Scroll to latest
|
|
this.$msglog.value += msg + '\n';
|
|
return this.$msglog.scrollTop = this.$msglog.scrollHeight;
|
|
}
|
|
|
|
}
|
|
|
|
// DOM elements references.
|
|
DebugUI.prototype.$msglog = null;
|
|
|
|
DebugUI.prototype.$status = null;
|
|
|
|
/*
|
|
Entry point.
|
|
*/
|
|
|
|
var snowflake, query, debug, ui, silenceNotifications, log, dbg, init;
|
|
|
|
(function() {
|
|
|
|
if (((typeof TESTING === "undefined" || TESTING === null) || !TESTING) && !Util.featureDetect()) {
|
|
console.log('webrtc feature not detected. shutting down');
|
|
return;
|
|
}
|
|
|
|
snowflake = null;
|
|
|
|
query = new URLSearchParams(location.search);
|
|
|
|
debug = Params.getBool(query, 'debug', false);
|
|
|
|
silenceNotifications = Params.getBool(query, 'silent', false);
|
|
|
|
// Log to both console and UI if applicable.
|
|
// Requires that the snowflake and UI objects are hooked up in order to
|
|
// log to console.
|
|
log = function(msg) {
|
|
console.log('Snowflake: ' + msg);
|
|
return snowflake != null ? snowflake.ui.log(msg) : void 0;
|
|
};
|
|
|
|
dbg = function(msg) {
|
|
if (debug || ((snowflake != null ? snowflake.ui : void 0) instanceof DebugUI)) {
|
|
return log(msg);
|
|
}
|
|
};
|
|
|
|
init = function() {
|
|
var broker, config, ui;
|
|
config = new Config;
|
|
if ('off' !== query['ratelimit']) {
|
|
config.rateLimitBytes = Params.getByteCount(query, 'ratelimit', config.rateLimitBytes);
|
|
}
|
|
ui = null;
|
|
if (document.getElementById('status') !== null) {
|
|
ui = new DebugUI();
|
|
} else {
|
|
ui = new UI();
|
|
}
|
|
broker = new Broker(config.brokerUrl);
|
|
snowflake = new Snowflake(config, ui, broker);
|
|
log('== snowflake proxy ==');
|
|
if (Util.snowflakeIsDisabled(config.cookieName)) {
|
|
// Do not activate the proxy if any number of conditions are true.
|
|
log('Currently not active.');
|
|
return;
|
|
}
|
|
// Otherwise, begin setting up WebRTC and acting as a proxy.
|
|
dbg('Contacting Broker at ' + broker.url);
|
|
snowflake.setRelayAddr(config.relayAddr);
|
|
return snowflake.beginWebRTC();
|
|
};
|
|
|
|
// Notification of closing tab with active proxy.
|
|
window.onbeforeunload = function() {
|
|
if (
|
|
!silenceNotifications &&
|
|
snowflake !== null &&
|
|
ui.active
|
|
) {
|
|
return Snowflake.MESSAGE.CONFIRMATION;
|
|
}
|
|
return null;
|
|
};
|
|
|
|
window.onunload = function() {
|
|
if (snowflake !== null) { snowflake.disable(); }
|
|
return null;
|
|
};
|
|
|
|
window.onload = init;
|
|
|
|
}());
|