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 }