tor-browser

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

file_bug1250148.sjs (1966B)


      1 const CC = Components.Constructor;
      2 const BinaryInputStream = CC(
      3   "@mozilla.org/binaryinputstream;1",
      4   "nsIBinaryInputStream",
      5   "setInputStream"
      6 );
      7 
      8 function utf8decode(s) {
      9   return decodeURIComponent(escape(s));
     10 }
     11 
     12 function utf8encode(s) {
     13   return unescape(encodeURIComponent(s));
     14 }
     15 
     16 function handleRequest(request, response) {
     17   var bodyStream = new BinaryInputStream(request.bodyInputStream);
     18 
     19   var requestBody = "";
     20   while ((bodyAvail = bodyStream.available()) > 0) {
     21     requestBody += bodyStream.readBytes(bodyAvail);
     22   }
     23 
     24   var result = [];
     25 
     26   if (request.method == "POST") {
     27     var contentTypeParams = {};
     28     request
     29       .getHeader("Content-Type")
     30       .split(/\s*\;\s*/)
     31       .forEach(function (str) {
     32         if (str.indexOf("=") >= 0) {
     33           let [name, value] = str.split("=");
     34           contentTypeParams[name] = value;
     35         } else {
     36           contentTypeParams[""] = str;
     37         }
     38       });
     39 
     40     if (
     41       contentTypeParams[""] == "multipart/form-data" &&
     42       request.queryString == ""
     43     ) {
     44       requestBody
     45         .split("--" + contentTypeParams.boundary)
     46         .slice(1, -1)
     47         .forEach(function (s) {
     48           let headers = {};
     49           let headerEnd = s.indexOf("\r\n\r\n");
     50           s.substr(2, headerEnd - 2)
     51             .split("\r\n")
     52             .forEach(function (str) {
     53               // We're assuming UTF8 for now
     54               let [name, value] = str.split(": ");
     55               headers[name] = utf8decode(value);
     56             });
     57 
     58           let body = s.substring(headerEnd + 4, s.length - 2);
     59           if (
     60             !headers["Content-Type"] ||
     61             headers["Content-Type"] == "text/plain"
     62           ) {
     63             // We're assuming UTF8 for now
     64             body = utf8decode(body);
     65           }
     66           result.push({ headers, body });
     67         });
     68     }
     69   }
     70 
     71   response.setHeader("Content-Type", "text/plain; charset=utf-8", false);
     72   response.write(utf8encode(JSON.stringify(result)));
     73 }