/services/remime.cgi

#!/usr/bin/env python
"""
remime - A CGI Tool to Allow MIME Type Override
License: GPL 2; share and enjoy!
Author: Sean B. Palmer, inamidst.com

Implemented requests: 
   00:31:02 <kpreid> sbp: why not propagate the request's UA?
   - http://swhack.com/logs/2004-08-06#T00-31-02

---

<title>MIME Type Fixing Service</title>
<link rel="stylesheet" type="text/css" href="/trove/pwyky.css" />
<h1>MIME Type Fixing Service</h1>

<form action="./remime" method="GET">
<div>URI <input type="text" size="35" name="uri" /></div>
<div>MIME Type: <input type="text" size="25" name="mime" /></div>
<div><input type="submit" /></div>
</form>

<p>This form allows you to fix the MIME type of documents that are
being incorrectly served. View the <a href="/inside/services/remime">Python 
source code</a>.</p>

<address>
<a href="http://inamidst.com/sbp/">Sean B. Palmer</a>
</address>
"""

print "Content-Type: text/html"
print
print "<title>HTTP Remime</title>"
print "<h1>HTTP Remime</h1>"
print "<p>This service is presently offline.</p>"
import sys
sys.exit()

import cgitb; cgitb.enable()
import sys, os, urllib
sys.path.append('../misc')
from cgiutil import method, form

class Grab(urllib.URLopener): 
   def __init__(self, *args): 
      version = os.environ.get('HTTP_USER_AGENT')
      self.version = version or 'Mozilla/5.0 (remime)'
      urllib.URLopener.__init__(self, *args)
   def http_error_default(self, url, fp, errcode, errmsg, headers): 
      return urllib.addinfourl(fp, [headers, errcode], "http:" + url)
urllib._urlopener = Grab()

def serve(status, headers, s): 
   sys.stdout.write("Status: %s\r\n" % status)
   sys.stdout.write(headers + "\r\n")
   sys.stdout.write(s)

def remime(uri, mime): 
   u = urllib.urlopen(uri)
   info = u.info()
   s = u.read()
   u.close()

   if not isinstance(info, list): 
      status, headers = 200, info
   else: headers, status = tuple(info)

   headers['Content-Type'] = mime
   headers = str(headers)
   serve(status, headers, s)

def homepage(): 
   headers = 'Content-Type: text/html; charset=utf-8\r\n'
   i = __doc__.find('---')
   serve(200, headers, __doc__[i+3:])

def main(): 
   if form.has_key('uri') and form.has_key('mime'): 
      remime(form('uri'), form('mime'))
   elif method == 'GET': homepage()
   else: serve(501, "<p>Only GET is supported.</p>\n")

if __name__=="__main__": 
   main()