154
155
HTTP_INSUFFICIENT_STORAGE = 507
155
156
HTTP_NOT_EXTENDED = 510
157
def __init__(self, req):
158
"""Builds an IVLE request object from a mod_python request object.
159
This results in an object with all of the necessary methods and
158
def __init__(self, req, config):
159
"""Create an IVLE request from a mod_python one.
162
req: A mod_python request object.
161
@param req: A mod_python request.
162
@param config: An IVLE configuration.
165
165
# Methods are mostly wrappers around the Apache request object
166
166
self.apache_req = req
167
168
self.headers_written = False
169
170
# Determine if the browser used the public host name to make the
170
171
# request (in which case we are in "public mode")
171
if req.hostname == ivle.conf.public_host:
172
if req.hostname == config['urls']['public_host']:
172
173
self.publicmode = True
174
175
self.publicmode = False
178
179
self.uri = req.uri
179
180
# Split the given path into the app (top-level dir) and sub-path
180
181
# (after first stripping away the root directory)
181
path = ivle.util.unmake_path(req.uri)
182
path = self.unmake_path(req.uri)
182
183
(self.app, self.path) = (ivle.util.split_path(path))
184
185
self.hostname = req.hostname
188
189
# Open a database connection and transaction, keep it around for users
189
190
# of the Request object to use
190
self.store = ivle.database.get_store()
191
self.store = ivle.database.get_store(config)
192
193
# Default values for the output members
193
194
self.status = Request.HTTP_OK
252
253
for cookie in plugin.cookies:
253
254
self.add_cookie(mod_python.Cookie.Cookie(cookie, '',
254
255
expires=1, path='/'))
255
self.throw_redirect(ivle.util.make_path(''))
256
self.throw_redirect(self.make_path(''))
293
294
mod_python.Cookie.add_cookie(self.apache_req, cookie, value, **attributes)
296
def make_path(self, path):
297
"""Prepend the IVLE URL prefix to the given path.
299
This is used when generating URLs to send to the client.
301
This method is DEPRECATED. We no longer support use of a prefix.
303
return os.path.join(self.config['urls']['root'], path)
305
def unmake_path(self, path):
306
"""Strip the IVLE URL prefix from the given path, if present.
308
Also normalises the path.
310
This method is DEPRECATED. We no longer support use of a prefix.
312
path = os.path.normpath(path)
313
root = os.path.normpath(self.config['urls']['root'])
315
if path.startswith(root):
316
path = path[len(root):]
317
# Take out the slash as well
318
if len(path) > 0 and path[0] == os.sep:
295
323
def get_session(self):
296
324
"""Returns a mod_python Session object for this request.
297
325
Note that this is dependent on mod_python and may need to change
298
interface if porting away from mod_python."""
326
interface if porting away from mod_python.
328
IMPORTANT: Call unlock() on the session as soon as you are done with
329
it! If you don't, all other requests will block!
299
331
# Cache the session object and set the timeout to 24 hours.
300
332
if not hasattr(self, 'session'):
301
333
self.session = mod_python.Session.FileSession(self.apache_req,