mirror of
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git
synced 2025-10-14 05:11:19 -04:00
Some files were omitted in the .eslintignore, left as an exercise to the reader. We probably want to reduce amount of globals overall and use proper es modules.
84 lines
1.9 KiB
JavaScript
84 lines
1.9 KiB
JavaScript
/* global Util, chrome, Config, WebExtUI, Broker, Snowflake */
|
|
/* eslint no-unused-vars: 0 */
|
|
|
|
/*
|
|
Entry point.
|
|
*/
|
|
|
|
var debug, snowflake, config, broker, ui, log, dbg, init, update, silenceNotifications;
|
|
|
|
(function () {
|
|
|
|
silenceNotifications = false;
|
|
debug = false;
|
|
snowflake = null;
|
|
config = null;
|
|
broker = null;
|
|
ui = null;
|
|
|
|
// 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) {
|
|
return log(msg);
|
|
}
|
|
};
|
|
|
|
if (!Util.featureDetect()) {
|
|
chrome.runtime.onConnect.addListener(function(port) {
|
|
return port.postMessage({
|
|
missingFeature: true
|
|
});
|
|
});
|
|
return;
|
|
}
|
|
|
|
init = function() {
|
|
config = new Config;
|
|
ui = new WebExtUI();
|
|
broker = new Broker(config.brokerUrl);
|
|
snowflake = new Snowflake(config, ui, broker);
|
|
log('== snowflake proxy ==');
|
|
return ui.initToggle();
|
|
};
|
|
|
|
update = function() {
|
|
if (!ui.enabled) {
|
|
// Do not activate the proxy if any number of conditions are true.
|
|
snowflake.disable();
|
|
log('Currently not active.');
|
|
return;
|
|
}
|
|
// Otherwise, begin setting up WebRTC and acting as a proxy.
|
|
dbg('Contacting Broker at ' + broker.url);
|
|
log('Starting snowflake');
|
|
snowflake.setRelayAddr(config.relayAddr);
|
|
return snowflake.beginWebRTC();
|
|
};
|
|
|
|
// Notification of closing tab with active proxy.
|
|
window.onbeforeunload = function() {
|
|
if (
|
|
!silenceNotifications &&
|
|
snowflake !== null &&
|
|
Snowflake.MODE.WEBRTC_READY === snowflake.state
|
|
) {
|
|
return Snowflake.MESSAGE.CONFIRMATION;
|
|
}
|
|
return null;
|
|
};
|
|
|
|
window.onunload = function() {
|
|
if (snowflake !== null) { snowflake.disable(); }
|
|
return null;
|
|
};
|
|
|
|
window.onload = init;
|
|
|
|
}());
|