Mercurial > p > roundup > code
annotate roundup.cgi @ 10:e09edaebc9de
added more todo items
| author | Anthony Baxter <anthonybaxter@users.sourceforge.net> |
|---|---|
| date | Thu, 19 Jul 2001 06:37:07 +0000 |
| parents | 5e92642cd1f8 |
| children |
| rev | line source |
|---|---|
|
0
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2 |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3 import sys |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
4 if int(sys.version[0]) < 2: |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
5 print "Content-Type: text/plain\n" |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
6 print "Roundup requires Python 2.0 or newer." |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
7 |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
8 import os, traceback, StringIO, cgi, binascii |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
9 |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
10 try: |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
11 import cgitb |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
12 except: |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
13 print "Content-Type: text/html\n" |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
14 print "Failed to import cgitb" |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
15 print "<pre>" |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
16 s = StringIO.StringIO() |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
17 traceback.print_exc(None, s) |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
18 print cgi.escape(s.getvalue()) |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
19 print "</pre>" |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
20 |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
21 # Force import first from the same directory where this script lives. |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
22 dir, name = os.path.split(sys.argv[0]) |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
23 sys.path[:0] = [dir or "."] |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
24 |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
25 def main(out): |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
26 import config, roundupdb, roundup_cgi |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
27 db = roundupdb.openDB(config.DATABASE, 'admin') |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
28 auth = os.environ.get("HTTP_CGI_AUTHORIZATION", None) |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
29 message = 'Unauthorised' |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
30 if auth: |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
31 l = binascii.a2b_base64(auth.split(' ')[1]).split(':') |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
32 user = l[0] |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
33 password = None |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
34 if len(l) > 1: |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
35 password = l[1] |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
36 try: |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
37 uid = db.user.lookup(user) |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
38 except KeyError: |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
39 auth = None |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
40 message = 'Username not recognised' |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
41 else: |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
42 if password != db.user.get(uid, 'password'): |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
43 message = 'Incorrect password' |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
44 auth = None |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
45 if not auth: |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
46 out.write('Content-Type: text/html\n') |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
47 out.write('Status: 401\n') |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
48 out.write('WWW-Authenticate: basic realm="Roundup"\n\n') |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
49 keys = os.environ.keys() |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
50 keys.sort() |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
51 out.write(message) |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
52 return |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
53 client = roundup_cgi.Client(out, os.environ, user) |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
54 try: |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
55 client.main() |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
56 except roundup_cgi.Unauthorised: |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
57 out.write('Content-Type: text/html\n') |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
58 out.write('Status: 403\n\n') |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
59 out.write('Unauthorised') |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
60 |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
61 out, err = sys.stdout, sys.stderr |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
62 try: |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
63 import config, roundup_cgi |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
64 sys.stdout = sys.stderr = open(config.LOG, 'a') |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
65 main(out) |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
66 except: |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
67 sys.stdout, sys.stderr = out, err |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
68 out.write('Content-Type: text/html\n\n') |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
69 cgitb.handler() |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
70 sys.stdout.flush() |
|
5e92642cd1f8
Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
71 sys.stdout, sys.stderr = out, err |
