annotate roundup/cgi/apache.py @ 3594:b5b6a6f7743a

fix bug in menu() permission filter [SF#1444440]
author Alexander Smishlajev <a1s@users.sourceforge.net>
date Thu, 09 Mar 2006 05:56:12 +0000
parents 835ac4013578
children e8d4ac23692f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2552
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1 # mod_python interface for Roundup Issue Tracker
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
2 #
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
3 # This module is free software, you may redistribute it
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
4 # and/or modify under the same terms as Python.
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
5 #
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
6 # This module provides Roundup Web User Interface
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
7 # using mod_python Apache module. Initially written
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
8 # with python 2.3.3, mod_python 3.1.3, roundup 0.7.0.
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
9 #
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
10 # This module operates with only one tracker
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
11 # and must be placed in the tracker directory.
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
12 #
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
13 # History (most recent first):
2560
d45f1669599c added 'TrackerLanguage' option;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2552
diff changeset
14 # 11-jul-2004 [als] added 'TrackerLanguage' option;
d45f1669599c added 'TrackerLanguage' option;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2552
diff changeset
15 # pass message translator to the tracker client instance
2552
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
16 # 04-jul-2004 [als] tracker lookup moved from module global to request handler;
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
17 # use PythonOption TrackerHome (configured in apache)
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
18 # to open the tracker
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
19 # 06-may-2004 [als] use cgi.FieldStorage from Python library
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
20 # instead of mod_python FieldStorage
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
21 # 29-apr-2004 [als] created
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
22
2944
835ac4013578 added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2809
diff changeset
23 __version__ = "$Revision: 1.4 $"[11:-2]
835ac4013578 added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2809
diff changeset
24 __date__ = "$Date: 2004-11-22 07:33:34 $"[7:-2]
2552
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
25
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
26 import cgi
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
27 import os
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
28
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
29 from mod_python import apache
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
30
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
31 import roundup.instance
2560
d45f1669599c added 'TrackerLanguage' option;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2552
diff changeset
32 from roundup.cgi import TranslationService
2552
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
33
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
34 class Headers(dict):
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
35
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
36 """HTTP headers wrapper"""
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
37
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
38 def __init__(self, headers):
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
39 """Initialize with `apache.table`"""
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
40 super(Headers, self).__init__(headers)
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
41 self.getheader = self.get
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
42
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
43 class Request(object):
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
44
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
45 """`apache.Request` object wrapper providing roundup client interface"""
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
46
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
47 def __init__(self, request):
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
48 """Initialize with `apache.Request` object"""
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
49 self._req = request
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
50 # .headers.getheader()
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
51 self.headers = Headers(request.headers_in)
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
52 # .wfile.write()
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
53 self.wfile = self._req
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
54
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
55 def send_response(self, response_code):
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
56 """Set HTTP response code"""
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
57 self._req.status = response_code
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
58
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
59 def send_header(self, name, value):
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
60 """Set output header"""
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
61 # value may be an instance of roundup.cgi.exceptions.HTTPException
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
62 value = str(value)
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
63 # XXX default content_type is "text/plain",
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
64 # and ain't overrided by "Content-Type" header
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
65 if name == "Content-Type":
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
66 self._req.content_type = value
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
67 else:
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
68 self._req.headers_out.add(name, value)
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
69
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
70 def end_headers(self):
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
71 """NOOP. There aint no such thing as 'end_headers' in mod_python"""
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
72 pass
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
73
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
74 def handler(req):
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
75 """HTTP request handler"""
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
76 _options = req.get_options()
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
77 _home = _options.get("TrackerHome")
2560
d45f1669599c added 'TrackerLanguage' option;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2552
diff changeset
78 _lang = _options.get("TrackerLanguage")
2944
835ac4013578 added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2809
diff changeset
79 _timing = _options.get("TrackerTiming", "no")
835ac4013578 added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2809
diff changeset
80 if _timing.lower() in ("no", "false"):
835ac4013578 added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2809
diff changeset
81 _timing = ""
835ac4013578 added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2809
diff changeset
82 _debug = _options.get("TrackerDebug", "no")
835ac4013578 added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2809
diff changeset
83 _debug = _debug.lower not in ("no", "false")
2552
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
84 if not (_home and os.path.isdir(_home)):
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
85 apache.log_error(
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
86 "PythonOption TrackerHome missing or invalid for %(uri)s"
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
87 % {'uri': req.uri})
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
88 return apache.HTTP_INTERNAL_SERVER_ERROR
2944
835ac4013578 added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2809
diff changeset
89 _tracker = roundup.instance.open(_home, not _debug)
2552
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
90 # create environment
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
91 # Note: cookies are read from HTTP variables, so we need all HTTP vars
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
92 req.add_common_vars()
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
93 _env = dict(req.subprocess_env)
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
94 # XXX classname must be the first item in PATH_INFO. roundup.cgi does:
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
95 # path = string.split(os.environ.get('PATH_INFO', '/'), '/')
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
96 # os.environ['PATH_INFO'] = string.join(path[2:], '/')
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
97 # we just remove the first character ('/')
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
98 _env["PATH_INFO"] = req.path_info[1:]
2944
835ac4013578 added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2809
diff changeset
99 if _timing:
835ac4013578 added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2809
diff changeset
100 _env["CGI_SHOW_TIMING"] = _timing
2552
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
101 _form = cgi.FieldStorage(req, environ=_env)
2560
d45f1669599c added 'TrackerLanguage' option;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2552
diff changeset
102 _client = _tracker.Client(_tracker, Request(req), _env, _form,
2809
353dc16a49b2 pass tracker home directory to get_translation()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2560
diff changeset
103 translator=TranslationService.get_translation(_lang,
353dc16a49b2 pass tracker home directory to get_translation()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2560
diff changeset
104 tracker_home=_home))
2552
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
105 _client.main()
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
106 return apache.OK
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
107
41fbe26aa2df mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
108 # vim: set et sts=4 sw=4 :

Roundup Issue Tracker: http://roundup-tracker.org/