A vanilla node proxy that gives webpages a treat.
Clone this gist and simply run node index.js
. Then configure
127.0.0.1:8484
as a proxy and you're good to go.
Have fun and be sure to report any pranks!
var http = require('http'), | |
spawn = require('child_process').spawn, | |
fs = require('fs'), | |
parseUrl = require('url').parse; | |
// read lolcat.jpg in current directory | |
var lolcat = fs.readFileSync('lolcat.jpg'); | |
var sendLolcat = function(req, res, pres) { | |
/* | |
* LOLCATS!!!!!!!! | |
*/ | |
pres.headers['content-type'] = 'image/jpg'; | |
delete pres.headers['content-length']; | |
res.writeHead(pres.statusCode, pres.headers); | |
var identify = spawn("identify", ['-']); | |
identify.stdout.on('data', function(data) { | |
var dimensions = data.toString().match(/ (\d+x\d+) /); | |
if (dimensions) { | |
dimensions = dimensions[1]; | |
console.log('dimensions', dimensions, 'url', req.url); | |
var convert = spawn('convert', ['-', '-resize', '' + dimensions + '\!', 'jpeg:-']); | |
convert.stdout.pipe(res); | |
convert.stderr.on('data', function(err) { | |
console.log('err', err.toString()); | |
}); | |
convert.stdin.write(lolcat); | |
convert.stdin.end(); | |
} else { | |
res.end(); | |
} | |
}); | |
pres.pipe(identify.stdin); | |
}; | |
var rotateAndBlurHtml = function(req, res, pres) { | |
console.log('body replace!'); | |
res.writeHead(pres.statusCode, pres.headers); | |
pres.setEncoding('utf-8'); | |
pres.on('data', function(chunk) { | |
// dont do this at home, kids | |
chunk = chunk.replace(/<\/body>/, '<script>document.body.style.MozTransform="rotate(-3deg)"; document.body.style.webkitFilter="blur(3px)";</script></body>'); | |
res.write(chunk); | |
}); | |
pres.on('end', function() { | |
res.end(); | |
}); | |
}; | |
var forwardResponse = function(req, res, pres) { | |
res.writeHead(pres.statusCode, pres.headers); | |
pres.on('data', function(chunk) { | |
res.write(chunk); | |
}); | |
pres.on('end', function() { | |
res.end(); | |
}); | |
}; | |
http.createServer(function(req, res) { | |
var u = parseUrl(req.url); | |
u.method = req.method; | |
// proxy request | |
var preq = http.request(u, function(pres) { | |
if (pres.headers['content-type'] && pres.headers['content-type'].match(/^image\//)) { | |
sendLolcat(req, res, pres); | |
} else if (pres.headers['content-type'] && pres.headers['content-type'].match(/^text\/html/)) { | |
rotateAndBlurHtml(req, res, pres); | |
} else { | |
forwardResponse(req, res, pres); | |
} | |
}); | |
preq.on('error', function(err) { | |
console.log(err); | |
}); | |
preq.end(); | |
}).listen(8484); |