From aa59a979fd44fb6d3036150e386099470e576323 Mon Sep 17 00:00:00 2001
From: tomsmeding <tom.smeding@gmail.com>
Date: Thu, 24 Aug 2017 17:50:36 +0200
Subject: Add proxy module

---
 modules/proxy/.gitignore |  1 +
 modules/proxy/proxy.js   | 50 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 51 insertions(+)
 create mode 100644 modules/proxy/.gitignore
 create mode 100644 modules/proxy/proxy.js

(limited to 'modules/proxy')

diff --git a/modules/proxy/.gitignore b/modules/proxy/.gitignore
new file mode 100644
index 0000000..f4a3cc2
--- /dev/null
+++ b/modules/proxy/.gitignore
@@ -0,0 +1 @@
+idfile.txt
diff --git a/modules/proxy/proxy.js b/modules/proxy/proxy.js
new file mode 100644
index 0000000..66c50df
--- /dev/null
+++ b/modules/proxy/proxy.js
@@ -0,0 +1,50 @@
+var cmn=require("../$common.js"),
+    fs=require("fs"),
+    http=require("http"),
+    https=require("https"),
+    URL=require("url");
+
+
+function fetch(method,url,cb){
+	var module;
+	if(url.slice(0,7)=="http://")module=http;
+	else if(url.slice(0,8)=="https://")module=https;
+	var obj=URL.parse(url);
+	obj.method=method;
+	module.request(obj,function(res){
+		var body="";
+		res.on("data",function(data){body+=data;});
+		res.on("end",function(){
+			cb(res.statusCode,body);
+		});
+	}).on("error",function(){
+		cb(null,null);
+	}).end();
+}
+
+function objectFromList(l){
+	var obj={};
+	for(var i=0;i<l.length;i++)obj[l[i][0]]=l[i][1];
+	return obj;
+}
+
+module.exports=function(app,io,moddir){
+	var iddict=objectFromList(
+			fs.readFileSync(moddir+"/idfile.txt").toString()
+				.split("\n").map(function(r){return r.split(" ");}));
+
+	app.all("/proxy/:id/*",function(req,res){
+		var id=req.params.id;
+		var path="/"+req.path.split("/").slice(3).join("/");
+		if(iddict[id]){
+			fetch(req.method,iddict[id]+path,function(status,body){
+				if(status==null)res.status(500).send("An error occurred...\n");
+				else res.status(status).send(body);
+			});
+		} else {
+			res.status(404).send(
+				"That ID is incorrect.\n"+
+				"Please contact the person you got this link from.\n");
+		}
+	});
+};
-- 
cgit v1.2.3-70-g09d2