summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 5bcde85)
raw | patch | inline | side by side (parent: 5bcde85)
author | richard <richard@57a73879-2fb5-44c3-a270-3262357dd7e2> | |
Sun, 22 Jul 2001 11:47:07 +0000 (11:47 +0000) | ||
committer | richard <richard@57a73879-2fb5-44c3-a270-3262357dd7e2> | |
Sun, 22 Jul 2001 11:47:07 +0000 (11:47 +0000) |
git-svn-id: http://svn.roundup-tracker.org/svnroot/roundup/trunk@28 57a73879-2fb5-44c3-a270-3262357dd7e2
cgi-bin/roundup.cgi | [new file with mode: 0755] | patch | blob |
diff --git a/cgi-bin/roundup.cgi b/cgi-bin/roundup.cgi
--- /dev/null
+++ b/cgi-bin/roundup.cgi
@@ -0,0 +1,109 @@
+#!/usr/bin/env python
+
+# $Id: roundup.cgi,v 1.1 2001-07-22 11:47:07 richard Exp $
+
+# python version check
+import sys
+if int(sys.version[0]) < 2:
+ print "Content-Type: text/plain\n"
+ print "Roundup requires Python 2.0 or newer."
+
+#
+## Configuration
+#
+
+# This indicates where the Roundup instance lives
+ROUNDUPS = {
+ 'test': '/tmp/roundup_test',
+}
+
+# Where to log debugging information to. Use an instance of DevNull if you
+# don't want to log anywhere.
+class DevNull:
+ def write(self, info):
+ pass
+LOG = open('/var/log/roundup.cgi.log', 'a')
+#LOG = DevNull()
+
+#
+## end configuration
+#
+
+
+#
+# Set up the error handler
+#
+try:
+ import traceback, StringIO, cgi
+ from roundup import cgitb
+except:
+ print "Content-Type: text/html\n"
+ print "Failed to import cgitb.<pre>"
+ s = StringIO.StringIO()
+ traceback.print_exc(None, s)
+ print cgi.escape(s.getvalue()), "</pre>"
+
+def main(instance, out):
+ from roundup import cgi_client
+ db = instance.open('admin')
+ auth = os.environ.get("HTTP_CGI_AUTHORIZATION", None)
+ message = 'Unauthorised'
+ if auth:
+ l = binascii.a2b_base64(auth.split(' ')[1]).split(':')
+ user = l[0]
+ password = None
+ if len(l) > 1:
+ password = l[1]
+ try:
+ uid = db.user.lookup(user)
+ except KeyError:
+ auth = None
+ message = 'Username not recognised'
+ else:
+ if password != db.user.get(uid, 'password'):
+ message = 'Incorrect password'
+ auth = None
+ if not auth:
+ out.write('Content-Type: text/html\n')
+ out.write('Status: 401\n')
+ out.write('WWW-Authenticate: basic realm="Roundup"\n\n')
+ keys = os.environ.keys()
+ keys.sort()
+ out.write(message)
+ return
+ client = instance.Client(out, os.environ, user)
+ try:
+ client.main()
+ except cgi_client.Unauthorised:
+ out.write('Content-Type: text/html\n')
+ out.write('Status: 403\n\n')
+ out.write('Unauthorised')
+
+#
+# Now do the actual CGI handling
+#
+out, err = sys.stdout, sys.stderr
+try:
+ sys.stdout = sys.stderr = LOG
+ import os, string
+ instance = string.split(os.environ['PATH_INFO'], '/')[1]
+ if ROUNDUPS.has_key(instance):
+ instance_home = ROUNDUPS[instance]
+ sys.path.insert(0, instance_home)
+ try:
+ instance = __import__(instance)
+ finally:
+ del sys.path[0]
+ else:
+ raise ValueError, 'No such instance "%s"'%instance
+ main(instance, out)
+except:
+ sys.stdout, sys.stderr = out, err
+ out.write('Content-Type: text/html\n\n')
+ cgitb.handler()
+sys.stdout.flush()
+sys.stdout, sys.stderr = out, err
+
+#
+# $Log: not supported by cvs2svn $
+#