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 }