tor-browser

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

redirect_server.sjs (1779B)


      1 function handleRequest(request, response) {
      2   if (request.queryString == "reset") {
      3     setState("counter", "0");
      4     setState("log", "");
      5 
      6     response.setStatusLine(request.httpVersion, 200, "OK");
      7     response.setHeader("Content-Type", "text/text", false);
      8     const body = "reset";
      9     response.bodyOutputStream.write(body, body.length);
     10     return;
     11   }
     12 
     13   if (request.queryString == "log") {
     14     response.setStatusLine(request.httpVersion, 200, "OK");
     15     response.setHeader("Content-Type", "text/text", false);
     16     const body = getState("log");
     17     response.bodyOutputStream.write(body, body.length);
     18     return;
     19   }
     20 
     21   setState("log", getState("log") + "," + request.queryString);
     22 
     23   const query = {};
     24   for (const segment of request.queryString.split("&")) {
     25     const [name, value] = segment.split("=");
     26     query[name] = value;
     27   }
     28 
     29   if ("redirect" in query) {
     30     response.setStatusLine(request.httpVersion, 302, "Found");
     31     if (query.redirect == "cacheable") {
     32       response.setHeader("Cache-Control", "max-age=10000", false);
     33     } else {
     34       response.setHeader("Cache-Control", "no-cache", false);
     35     }
     36     response.setHeader(
     37       "Location",
     38       `redirect_server.sjs?script=${query.script}`,
     39       false
     40     );
     41     return;
     42   }
     43 
     44   let counter = parseInt(getState("counter"));
     45   setState("counter", (counter + 1).toString());
     46 
     47   response.setStatusLine(request.httpVersion, 200, "OK");
     48   if (query.script == "cacheable") {
     49     response.setHeader("Cache-Control", "max-age=10000", false);
     50   } else {
     51     response.setHeader("Cache-Control", "no-cache", false);
     52   }
     53   response.setHeader("Content-Type", "text/javascript", false);
     54   const body = `
     55 document.body.setAttribute("counter", "${counter}");
     56 `;
     57   response.bodyOutputStream.write(body, body.length);
     58 }