var http = require('http') var https = require('https') var path = require('path') var fs = require('fs') var url = require('url') var PORT = 9090 var server = http.createServer().listen(PORT, function(){ console.log("Proxy listening on: http://lvh.me:%s", PORT) }) server.on('request', function (req, res){ if ( req.method == 'GET' && ! req.url.match(/API/) ) { // public... return stream(req, res) } console.log(req.method, req.url) // console.log(req.headers) var options = {} options.headers = get_headers(req.headers) options.method = req.method options.port = 443 options.hostname = "secure.api.yoox.biz" options.path = req.url req.pause() var connector = https.request(options, function(server_res) { console.log(">> GOT", server_res.statusCode) server_res.pause() res.writeHeader(server_res.statusCode, server_res.headers) // server_res.on("data", function(s){ console.log("<<", s.toString()) }) server_res.pipe(res) server_res.resume() }) // req.on("data", function(s){ console.log(">>", s.toString()) }) req.on("error", function(s){ console.log("/!\\ ERROR /!\\"); console.log(s) }) req.pipe(connector) req.resume() }) /* headers: { "x-yoox-appname": auth.appname, "x-yoox-account-token": auth.access_token, "x-yoox-device": auth.device, "x-yoox-api-key": auth.apikey, "x-yoox-cart-token": cart.token, }, */ function get_headers (h){ var hh = {} "appname account-token device api-key cart-token".split(" ").forEach(function(s){ var key = "x-yoox-" + s if (key in h) hh[key] = h[key] }) hh['Content-Type'] = "application/json" // h['content-type'] if ('content-length' in h) hh['Content-Length'] = h['content-length'] if ('connection' in h) hh['Connection'] = h['connection'] return hh } var mimes = { "gif": "image/gif", "png": "image/png", "jpg": "image/jpeg", "jpeg": "image/jpeg", "html": "text/html", "js": "application/javascript", "css": "text/css", "woff": "application/font-woff", "ttf": "application/font-woff", } function stream (req, res) { var url = req.url.toLowerCase().split("?")[0] var ext_partz = url.split("."), ext = ext_partz[ext_partz.length-1] var mime = mimes[ext] || "application/octet-stream" if (! url || url == "/") { url = "index.html" mime = "text/html" } var file = path.resolve("../StoneIsland/www/" + url) fs.stat(file, function(err, stats) { if (! stats) { // console.log(404) res.writeHead(404) res.end("404") return } var headers = { "Content-Length": stats.size, "Content-Type": mime, } res.writeHead(200, "OK", headers) var stream = fs.createReadStream(file, { start: 0, end: stats.size }) stream.on("open", function() { stream.pipe(res) }) stream.on("error", function(err) { console.log(err) stream.destroy() res.end() }) stream.on("close", function(){ stream.destroy() res.end() }) req.connection.setMaxListeners(50) req.connection.on('close', function(){ stream.destroy() res.end() }) }) }