← back to Agent Cabinet

front-page-audit/screens/crcp/repro/serve-repro.js

13 lines

const http=require("http"),fs=require("fs"),path=require("path");
const dir=__dirname;
const types={".html":"text/html",".js":"application/javascript",".css":"text/css"};
http.createServer((req,res)=>{
  let p=req.url==="/"?"/repro.html":req.url.split("?")[0];
  const f=path.join(dir,p);
  const resolved=path.resolve(f);
  const dirResolved=path.resolve(dir);
  if(!resolved.startsWith(dirResolved+path.sep)&&resolved!==dirResolved){res.writeHead(403);res.end("forbidden");return;}
  fs.readFile(f,(e,d)=>{ if(e){res.writeHead(404);res.end("nf "+p);return;}
    res.writeHead(200,{"Content-Type":types[path.extname(f)]||"text/plain"});res.end(d);});
}).listen(0,"127.0.0.1",function(){console.log("PORT="+this.address().port);});