#!/usr/bin/env node var cmn=require("./modules/$common.js"); var app=require("express")(), http=require("http"), httpServer=http.Server(app), io=require("socket.io")(httpServer), url=require("url"), fs=require("fs"), util=require("util"), node_path=require("path"), bodyParser=require("body-parser"), basicAuth=require("basic-auth"), Logger=require("./logger"); if(process.argv.length>3){ console.log("Pass optional port as first argument"); process.exit(1); } var PORT=process.argv.length==3?+process.argv[2]:80; // var reqlogger=new Logger("request_log.txt"); var whatpulse={"keys":"","clicks":""}; function refreshWhatpulse(){ http.get("http://api.whatpulse.org/user.php?user=tomsmeding&format=json&formatted=yes",function(res){ var body=""; res.on("data",function(data){body+=data;}); res.on("end",function(){ try{body=JSON.parse(body);} catch(e){return;} whatpulse.keys=body.Keys/*.replace(/,/g," ")*/; whatpulse.clicks=body.Clicks/*.replace(/,/g," ")*/; }); }).on("error",function(err){ console.log(`Whatpulse request error: ${err.message}`); }); } setInterval(refreshWhatpulse,6*3600*1000); //every 6 hours refreshWhatpulse(); // function simpleLogEscape(str){ // return str // .replace(/\\/g,"\\\\") // .replace(/\n/g,"\\n") // .replace(/ /g,"\\_"); // } // app.use(function(req,res,next){ // var line=simpleLogEscape(req.ip)+" "+ // simpleLogEscape(req.method)+" "+ // simpleLogEscape(req.hostname)+" "+ // simpleLogEscape(req.url); // if(req.headers["dnt"])line+=" dnt="+simpleLogEscape(req.headers["dnt"]); // if(req.headers["referer"])line+=" referer="+simpleLogEscape(req.headers["referer"]); // reqlogger.log(line); // next(); // }); /*app.use(function (req, res, next) { console.log(req.subdomains); next(); });*/ app.use(bodyParser.text()); var module_list=fs.readdirSync("modules").filter(function(f){ return ["$common.js",".DS_Store"].indexOf(f)==-1&&f[0]!="$"; }); for(i=0;i",path) .replace("[/*LISTINGLISTING*/]",JSON.stringify(items)) ); } else if(stats.isDirectory()&&fs.readdirSync(fname).indexOf("index.html")!=-1){ if(origpath[origpath.length-1]!="/")origpath+="/"; res.redirect(301,origpath+"index.html"); } else { res.status(404).send("That file does not exist."); return; } } function makeUrlSafe(req,sliceLength){ var parsed=url.parse(req.url); var part=parsed.pathname.slice(sliceLength); if(part=="")return "/"; return part.replace(/\/\.+[^\/]*\//g,"/"); } app.get("/",function(req,res){ res.send( String(fs.readFileSync(cmn.serverdir+"/index.html")) .replace(//,whatpulse["keys"]) .replace(//,whatpulse["clicks"]) ); }); app.get(["/f/univq","/f/univq/*"],cmn.authgen()); app.get(["/f","/f/*"],function(req,res){ requestFile(req,res,false,unescape(makeUrlSafe(req,2)),req.url); }); app.get(["/ff","/ff/*"],cmn.authgen()); app.get(["/ff","/ff/*"],function(req,res){ requestFile(req,res,true,unescape(makeUrlSafe(req,3)),req.url); }); app.get("/.well-known/*",function(req,res){ requestFile(req,res,false,"/well-known"+unescape(makeUrlSafe(req,12)),req.url); }); app.get("/google*.html",function(req,res){ var url=unescape(makeUrlSafe(req,0)); if(url.match(/^\/google[0-9a-fA-F]*\.html$/)){ res.sendFile(__dirname+url); } else { res.status(404).send("That file does not exist."); } }); ["o","k","rip","rip2"].forEach(function(target){ app.get("/"+target,function(req,res){ res.sendFile(cmn.webfilesdir+"/"+target+".html"); }); app.get("/"+target+"/*",function(req,res){ res.set('Content-Type', 'text/html'); res.send( String(fs.readFileSync(cmn.webfilesdir+"/"+target+".html")) .replace("",cmn.simpleHTMLescape(url.parse(req.url).pathname.slice(target.length+2))) ); }); }); app.get("/dr",function(req,res){ res.sendFile(cmn.webfilesdir+"/duckroll.html"); }); app.get(["/gpg","/pgp","/gpg.asc","/pgp.asc"],function(req,res){ res.type("text/plain"); res.sendFile(cmn.webfilesdir+"/pgp.asc"); }); app.get("/tomsg",function(req,res){ res.sendFile(cmn.webfilesdir+"/tomsg.html"); }); app.get("/goioi",function(req,res){ res.sendFile(cmn.webfilesdir+"/goioi.html"); }); /*app.get("/chat",function(req,res){ res.redirect(301,"http://tomsmeding.com:81"); });*/ // Error-handling middleware app.use(function(err,req,res,next){ var id=new Date().getTime().toString()+Math.random().toFixed(10).slice(2); console.log("Error caught in app: (id="+id+")"); console.log(err.stack); res.status(500).end("An internal error occurred; it has been logged with id "+id+".\n"); }); var server=httpServer.listen(PORT,function(){ var host=server.address().address; var port=server.address().port; console.log("Server listening at http://"+host+":"+port); });