--- /dev/null
+#!/usr/bin/env ruby
+
+require 'net/http'
+require 'uri'
+
+class NilClass
+ # Make it easier to check for empty string or nil
+ def empty?; true; end
+ def to_s; ""; end
+end
+
+
+def createUrl(url)
+ if !ENV["PATH_INFO"].empty?
+ url += ENV["PATH_INFO"]
+ end
+ if !ENV["QUERY_STRING"].empty?
+ url += "?" + ENV["QUERY_STRING"]
+ end
+ url = URI.parse(url);
+ if url.scheme != "http"
+ raise RuntimeError, "Unsupported scheme: #{url.scheme}"
+ end
+ return url
+end
+
+def createRequest(method, url)
+ path = url.path
+ if !url.query.empty?
+ path += "?" + url.query
+ end
+ if method == "GET"
+ req = Net::HTTP::Get.new(path)
+ elsif method == "POST"
+ req = Net::HTTP::Post.new(path)
+ req.body = $stdin.read()
+ else
+ raise RuntimeError, "No support for method: #{method}"
+ end
+ return req
+end
+
+def insertHeaders(req)
+ req["X-Forwarded-For"] = ENV["REMOTE_ADDR"]
+ req["Host"] = ENV["HTTP_HOST"]
+ req["Cookie"] = ENV["HTTP_COOKIE"]
+ req["Referer"] = ENV["HTTP_REFERER"]
+ req["Content-Length"] = ENV["CONTENT_LENGTH"]
+ req["Content-Type"] = ENV["CONTENT_TYPE"]
+ req["User-Agent"] = ENV["HTTP_USER_AGENT"]
+ req["Cache-Control"] = ENV["HTTP_CACHE_CONTROL"]
+ req["Authorization"] = ENV["HTTP_AUTHORIZATION"]
+ req["Accept"] = ENV["HTTP_ACCEPT"]
+ req["Accept-Charset"] = ENV["HTTP_ACCEPT_CHARSET"]
+ req["Accept-Encoding"] = ENV["HTTP_ACCEPT_ENCODING"]
+ req["Accept-Language"] = ENV["HTTP_ACCEPT_LANGUAGE"]
+end
+
+def doRequest(req, host, port)
+ # Make the request
+ res = Net::HTTP.start(host, port) do |http|
+ http.request(req)
+ end
+
+ # Tweak the headers a little
+ res.delete("transfer-encoding")
+ res.delete("transfer-length")
+ res["connection"] = "close"
+
+ return res
+end
+
+def printResult(res)
+ res.each_capitalized do |key, value|
+ print "#{key}: #{value}\r\n"
+ end
+ print "\r\n"
+ print res.body
+end
+
+def debug(msg)
+ File.open("/tmp/debuglog.txt", "a") { |f|
+ f << Time.new.to_s + " " + msg + "\n"
+ }
+end
+
+def proxyTo(basePath)
+ url = createUrl(basePath)
+ req = createRequest(ENV["REQUEST_METHOD"], url)
+ insertHeaders(req)
+ res = doRequest(req, url.host, url.port)
+ printResult(res)
+end
+