commit 25dac378ee11a9c7a33ef9527d5acc06b89c49e9 Author: Arlo Breault arlolra@gmail.com Date: Wed May 1 08:59:10 2019 -0400
Move init into its own file --- proxy/Cakefile | 1 + proxy/init.coffee | 95 ++++++++++++++++++++++++++++++++++++++++++++++++ proxy/snowflake.coffee | 97 -------------------------------------------------- 3 files changed, 96 insertions(+), 97 deletions(-)
diff --git a/proxy/Cakefile b/proxy/Cakefile index 8032034..d984c1b 100644 --- a/proxy/Cakefile +++ b/proxy/Cakefile @@ -5,6 +5,7 @@ fs = require 'fs' FILES = [ 'shims.coffee' 'util.coffee' + 'init.coffee' 'proxypair.coffee' 'websocket.coffee' 'broker.coffee' diff --git a/proxy/init.coffee b/proxy/init.coffee new file mode 100644 index 0000000..22176e5 --- /dev/null +++ b/proxy/init.coffee @@ -0,0 +1,95 @@ +# General snowflake proxy constants. +# For websocket-specific constants, see websocket.coffee. +BROKER = 'snowflake-broker.bamsoftware.com' +RELAY = + host: 'snowflake.bamsoftware.com' + port: '443' + # Original non-wss relay: + # host: '192.81.135.242' + # port: 9902 +COOKIE_NAME = "snowflake-allow" + +silenceNotifications = false +query = Query.parse(location) +DEBUG = Params.getBool(query, 'debug', false) + +# Bytes per second. Set to undefined to disable limit. +DEFAULT_RATE_LIMIT = DEFAULT_RATE_LIMIT || undefined +MIN_RATE_LIMIT = 10 * 1024 +RATE_LIMIT_HISTORY = 5.0 +DEFAULT_BROKER_POLL_INTERVAL = 5.0 * 1000 + +MAX_NUM_CLIENTS = 1 +CONNECTIONS_PER_CLIENT = 1 + +# TODO: Different ICE servers. +config = { + iceServers: [ + { urls: ['stun:stun.l.google.com:19302'] } + ] +} + +# Janky state machine +MODE = + INIT: 0 + WEBRTC_CONNECTING: 1 + WEBRTC_READY: 2 + +CONFIRMATION_MESSAGE = 'You're currently serving a Tor user via Snowflake.' + +snowflake = 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 = (msg) -> + console.log 'Snowflake: ' + msg + snowflake?.ui?.log msg + +dbg = (msg) -> log msg if DEBUG or snowflake.ui?.debug + +snowflakeIsDisabled = -> + cookies = Parse.cookie document.cookie + # Do nothing if snowflake has not been opted in by user. + if cookies[COOKIE_NAME] != '1' + log 'Not opted-in. Please click the badge to change options.' + return true + # Also do nothing if running in Tor Browser. + if mightBeTBB() + log 'Will not run within Tor Browser.' + return true + return false + + +### +Entry point. +### +init = (isNode) -> + # Hook up to the debug UI if available. + ui = if isNode then null else new UI() + silenceNotifications = Params.getBool(query, 'silent', false) + broker = new Broker BROKER + snowflake = new Snowflake broker, ui + + log '== snowflake proxy ==' + if snowflakeIsDisabled() + # 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 RELAY + snowflake.beginWebRTC() + +# Notification of closing tab with active proxy. +window.onbeforeunload = -> + if !silenceNotifications && MODE.WEBRTC_READY == snowflake.state + return CONFIRMATION_MESSAGE + null + +window.onunload = -> + pair.close() for pair in snowflake.proxyPairs + null + +window.onload = init.bind null, false diff --git a/proxy/snowflake.coffee b/proxy/snowflake.coffee index a8fc183..0192818 100644 --- a/proxy/snowflake.coffee +++ b/proxy/snowflake.coffee @@ -9,48 +9,8 @@ this proxy must always act as the answerer. TODO: More documentation ###
-# General snowflake proxy constants. -# For websocket-specific constants, see websocket.coffee. -BROKER = 'snowflake-broker.bamsoftware.com' -RELAY = - host: 'snowflake.bamsoftware.com' - port: '443' - # Original non-wss relay: - # host: '192.81.135.242' - # port: 9902 -COOKIE_NAME = "snowflake-allow" - -silenceNotifications = false -query = Query.parse(location) -DEBUG = Params.getBool(query, 'debug', false) - -# Bytes per second. Set to undefined to disable limit. -DEFAULT_RATE_LIMIT = DEFAULT_RATE_LIMIT || undefined -MIN_RATE_LIMIT = 10 * 1024 -RATE_LIMIT_HISTORY = 5.0 -DEFAULT_BROKER_POLL_INTERVAL = 5.0 * 1000 - -MAX_NUM_CLIENTS = 1 -CONNECTIONS_PER_CLIENT = 1 - -# TODO: Different ICE servers. -config = { - iceServers: [ - { urls: ['stun:stun.l.google.com:19302'] } - ] -} - -# Janky state machine -MODE = - INIT: 0 - WEBRTC_CONNECTING: 1 - WEBRTC_READY: 2 - -CONFIRMATION_MESSAGE = 'You're currently serving a Tor user via Snowflake.' - # Minimum viable snowflake for now - just 1 client. class Snowflake - relayAddr: null proxyPairs: [] rateLimit: null @@ -174,60 +134,3 @@ class Snowflake log 'Snowflake resetting...' @retries = 0 @beginWebRTC() - -snowflake = 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 = (msg) -> - console.log 'Snowflake: ' + msg - snowflake?.ui?.log msg - -dbg = (msg) -> log msg if DEBUG or snowflake.ui?.debug - -snowflakeIsDisabled = -> - cookies = Parse.cookie document.cookie - # Do nothing if snowflake has not been opted in by user. - if cookies[COOKIE_NAME] != '1' - log 'Not opted-in. Please click the badge to change options.' - return true - # Also do nothing if running in Tor Browser. - if mightBeTBB() - log 'Will not run within Tor Browser.' - return true - return false - - -### -Entry point. -### -init = (isNode) -> - # Hook up to the debug UI if available. - ui = if isNode then null else new UI() - silenceNotifications = Params.getBool(query, 'silent', false) - broker = new Broker BROKER - snowflake = new Snowflake broker, ui - - log '== snowflake proxy ==' - if snowflakeIsDisabled() - # 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 RELAY - snowflake.beginWebRTC() - -# Notification of closing tab with active proxy. -window.onbeforeunload = -> - if !silenceNotifications && MODE.WEBRTC_READY == snowflake.state - return CONFIRMATION_MESSAGE - null - -window.onunload = -> - pair.close() for pair in snowflake.proxyPairs - null - -window.onload = init.bind null, false