renaming folder edit_wp5_web_folder to map-service
[geo.git] / map-service / geo / mapviewer / proxy.cgi
diff --git a/map-service/geo/mapviewer/proxy.cgi b/map-service/geo/mapviewer/proxy.cgi
new file mode 100644 (file)
index 0000000..7bf3338
--- /dev/null
@@ -0,0 +1,72 @@
+#!/usr/bin/env python
+
+       import urllib2
+       import cgi
+       import sys, os
+       
+       # Designed to prevent Open Proxy type stuff.
+       
+       allowedHosts = ['www.openlayers.org', 'openlayers.org', 
+                       'labs.metacarta.com', 'world.freemap.in', 
+                       'prototype.openmnnd.org', 'geo.openplans.org',
+                       'sigma.openplans.org', 'demo.opengeo.org',
+                       'www.openstreetmap.org', 'sample.azavea.com',
+
+                       'v-swe.uni-muenster.de:8080', 
+                       'vmap0.tiles.osgeo.org']
+       
+       method = os.environ["REQUEST_METHOD"]
+       
+       if method == "POST":
+           qs = os.environ["QUERY_STRING"]
+           d = cgi.parse_qs(qs)
+           if d.has_key("url"):
+
+               url = d["url"][0]
+           else:
+               url = "http://www.openlayers.org"
+       else:
+           fs = cgi.FieldStorage()
+           url = fs.getvalue('url', "http://www.openlayers.org")
+       
+       try:
+           host = url.split("/")[2]
+           if allowedHosts and not host in allowedHosts:
+               print "Status: 502 Bad Gateway"
+               print "Content-Type: text/plain"
+               print
+               print "This proxy does not allow you to access that location (%s)." % (host,)
+               print
+               print os.environ
+        
+           elif url.startswith("http://") or url.startswith("https://"):
+          
+                   length = int(os.environ["CONTENT_LENGTH"])
+                   headers = {"Content-Type": os.environ["CONTENT_TYPE"]}
+                   body = sys.stdin.read(length)
+                   r = urllib2.Request(url, body, headers)
+                   y = urllib2.urlopen(r)
+               else:
+                   y = urllib2.urlopen(url)
+              
+               # print content type header
+               i = y.info()
+               if i.has_key("Content-Type"):
+                   print "Content-Type: %s" % (i["Content-Type"])
+               else:
+                   print "Content-Type: text/plain"
+               print
+              
+               print y.read()
+              
+               y.close()
+           else:
+               print "Content-Type: text/plain"
+               print
+               print "Illegal request."
+       
+       except Exception, E:
+           print "Status: 500 Unexpected Error"
+           print "Content-Type: text/plain"
+           print 
+  print "Some unexpected error occurred. Error text was:", E