summaryrefslogtreecommitdiff
path: root/proxy
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2015-11-03 18:58:28 -0500
committerJules Laplace <jules@okfoc.us>2015-11-03 18:58:28 -0500
commit2bb57e067e196b3623eb86528517addd52b67943 (patch)
tree19dcec39137da11e145c5599c8bdb90c99c12a80 /proxy
parentfffc000bd73b740318762747c07aa39adca1313a (diff)
app proxy running smoothly
Diffstat (limited to 'proxy')
-rw-r--r--proxy/index.js127
-rw-r--r--proxy/package.json5
2 files changed, 120 insertions, 12 deletions
diff --git a/proxy/index.js b/proxy/index.js
index c2e12c60..85a4981c 100644
--- a/proxy/index.js
+++ b/proxy/index.js
@@ -1,15 +1,52 @@
var http = require('http')
-var PORT = 4567
+var https = require('https')
+var path = require('path')
+var fs = require('fs')
+var url = require('url')
-var server = http.createServer(function (req, res){
- res.end('It Works!! Path Hit: ' + req.url)
- console.log(req.headers)
+var PORT = 9090
+
+var server = http.createServer().listen(PORT, function(){
+ console.log("Proxy listening on: http://lvh.me:%s", PORT)
})
-server.listen(PORT, function(){
- console.log("Proxy listening on: http://localhost:%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,
@@ -18,8 +55,76 @@ server.listen(PORT, function(){
"x-yoox-api-key": auth.apikey,
"x-yoox-cart-token": cart.token,
},
-
- proxy content body
- proxy method
- proxy query string
-*/ \ No newline at end of file
+*/
+
+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()
+ })
+ })
+} \ No newline at end of file
diff --git a/proxy/package.json b/proxy/package.json
index f7304d43..fd5c7ee2 100644
--- a/proxy/package.json
+++ b/proxy/package.json
@@ -7,5 +7,8 @@
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "okfocus",
- "license": "LNT"
+ "license": "LNT",
+ "dependencies": {
+ "najax": "^0.2.1"
+ }
}