#!/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"), bodyParser=require("body-parser"), basicAuth=require("basic-auth"); 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 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," ")*/; }); }); } setInterval(refreshWhatpulse,6*3600*1000); //every 6 hours refreshWhatpulse(); /*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>-->/,whatpulse["keys"]) .replace(//,whatpulse["clicks"]) ); }); app.get("/f/univq/*",cmn.authgen()); app.get("/f/*",function(req,res){ var parsed=url.parse(req.url),basefname=parsed.pathname.slice(2).replace(/\/\.+[^\/]*\//g,"/"); fname=cmn.rootdir+"/web_files"+basefname; console.log("Requesting file "+fname); var stats=fs.statSync(fname); if(!fs.existsSync(fname))res.send("That file does not exist."); else if(stats.isFile())res.sendFile(fname); else if(stats.isDirectory()){ var items=fs.readdirSync(fname) .filter(function(f){return f[0]!=".";}) .map(function(f){ if(fs.statSync(fname+"/"+f).isDirectory())return f+"/"; else return f; }); res.send( String(fs.readFileSync(cmn.rootdir+"/web_files/dirlisting.html")) .replace("",basefname) .replace("[/*LISTINGLISTING*/]",JSON.stringify(items)) ); } else res.send("I don't recognise that file."); }); ["o","k","rip","rip2"].forEach(function(target){ app.get("/"+target,function(req,res){ res.sendFile(cmn.rootdir+"/web_files/"+target+".html"); }); app.get("/"+target+"/*",function(req,res){ res.set('Content-Type', 'text/html'); res.send( String(fs.readFileSync(cmn.rootdir+"/web_files/"+target+".html")) .replace("",cmn.simpleHTMLescape(url.parse(req.url).pathname.slice(target.length+2))) ); }); }); app.get("/.well-known/keybase.txt",function(req,res){ res.sendFile(cmn.rootdir+"/web_files/keybase.txt"); }); app.get("/dr",function(req,res){ res.sendFile(cmn.rootdir+"/web_files/duckroll.html"); }); app.get(["/gpg","/pgp","/gpg.asc","/pgp.asc"],function(req,res){ res.type("text/plain"); res.sendFile(cmn.rootdir+"/web_files/pgp.asc"); }); /*app.get("/chat",function(req,res){ res.redirect(301,"http://tomsmeding.com:81"); });*/ var server=httpServer.listen(PORT,function(){ var host=server.address().address; var port=server.address().port; console.log("Server listening at http://"+host+":"+port); });