tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

network_geolocation.sjs (1899B)


      1 function parseQueryString(str) {
      2   if (str == "") {
      3     return {};
      4   }
      5 
      6   var paramArray = str.split("&");
      7   var regex = /^([^=]+)=(.*)$/;
      8   var params = {};
      9   for (var i = 0, sz = paramArray.length; i < sz; i++) {
     10     var match = regex.exec(paramArray[i]);
     11     if (!match) {
     12       throw new Error(`Bad parameter in queryString!  '${paramArray[i]}'`);
     13     }
     14     params[decodeURIComponent(match[1])] = decodeURIComponent(match[2]);
     15   }
     16 
     17   return params;
     18 }
     19 
     20 function getPosition(action) {
     21   var response = {
     22     status: "OK",
     23     location: {
     24       lat: 37.41857,
     25       lng: -122.08769,
     26     },
     27     accuracy: action == "worse-accuracy" ? 100 : 42,
     28   };
     29 
     30   return JSON.stringify(response);
     31 }
     32 
     33 var timer;
     34 function handleRequest(request, response) {
     35   var params = parseQueryString(request.queryString);
     36 
     37   if (params.action == "stop-responding") {
     38     response.processAsync();
     39     return;
     40   }
     41 
     42   var position = getPosition(params.action);
     43 
     44   if (params.action == "respond-garbage") {
     45     // better way?
     46     var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
     47     position = "";
     48     var len = Math.floor(Math.random() * 5000);
     49 
     50     for (var i = 0; i < len; i++) {
     51       var c = Math.floor(Math.random() * chars.length);
     52       position += chars.substring(c, c + 1);
     53     }
     54   }
     55 
     56   response.processAsync();
     57   response.setStatusLine("1.0", 200, "OK");
     58   response.setHeader("Cache-Control", "no-cache", false);
     59   response.setHeader("Content-Type", "aplication/x-javascript", false);
     60 
     61   var delay = 0;
     62   if ("delay" in params) {
     63     delay = params.delay;
     64   }
     65   if (params.action === "send404") {
     66     response.setStatusLine("1.0", 404, "Not Found");
     67     position = "";
     68   }
     69   timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
     70   timer.initWithCallback(
     71     function () {
     72       response.write(position);
     73       response.finish();
     74     },
     75     delay,
     76     timer.TYPE_ONE_SHOT
     77   );
     78 }