155
154
HTTP_INSUFFICIENT_STORAGE = 507
156
155
HTTP_NOT_EXTENDED = 510
158
def __init__(self, req, config):
159
"""Create an IVLE request from a mod_python one.
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
161
@param req: A mod_python request.
162
@param config: An IVLE configuration.
162
req: A mod_python request object.
165
165
# Methods are mostly wrappers around the Apache request object
166
166
self.apache_req = req
168
167
self.headers_written = False
170
169
# Determine if the browser used the public host name to make the
171
170
# request (in which case we are in "public mode")
172
if req.hostname == config['urls']['public_host']:
171
if req.hostname == ivle.conf.public_host:
173
172
self.publicmode = True
175
174
self.publicmode = False
179
178
self.uri = req.uri
180
179
# Split the given path into the app (top-level dir) and sub-path
181
180
# (after first stripping away the root directory)
182
path = self.unmake_path(req.uri)
181
path = ivle.util.unmake_path(req.uri)
183
182
(self.app, self.path) = (ivle.util.split_path(path))
185
184
self.hostname = req.hostname
189
188
# Open a database connection and transaction, keep it around for users
190
189
# of the Request object to use
191
self.store = ivle.database.get_store(config)
190
self.store = ivle.database.get_store()
193
192
# Default values for the output members
194
193
self.status = Request.HTTP_OK
253
252
for cookie in plugin.cookies:
254
253
self.add_cookie(mod_python.Cookie.Cookie(cookie, '',
255
254
expires=1, path='/'))
256
self.throw_redirect(self.make_path(''))
255
self.throw_redirect(ivle.util.make_path(''))
294
293
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:
323
295
def get_session(self):
324
296
"""Returns a mod_python Session object for this request.
325
297
Note that this is dependent on mod_python and may need to change
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!
298
interface if porting away from mod_python."""
331
299
# Cache the session object and set the timeout to 24 hours.
332
300
if not hasattr(self, 'session'):
333
301
self.session = mod_python.Session.FileSession(self.apache_req,