source: TI12-security/trunk/python/ndg.security.server/ndg/security/server/sso/sso/lib/base.py @ 3754

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI12-security/trunk/python/ndg.security.server/ndg/security/server/sso/sso/lib/base.py@3754
Revision 3754, 2.2 KB checked in by pjkersha, 12 years ago (diff)
Line 
1"""The base Controller API
2
3Provides the BaseController class for subclassing, and other objects
4utilized by Controllers.
5"""
6from pylons import c, cache, config, g, request, response, session
7from pylons.controllers import WSGIController
8from pylons.controllers.util import abort, etag_cache, redirect_to
9from pylons.decorators import jsonify, validate
10from pylons.i18n import _, ungettext, N_
11from pylons.templating import render
12
13import sso.lib.helpers as h
14import sso.model as model
15
16import urllib
17from urlparse import urlsplit, urlunsplit
18from base64 import urlsafe_b64encode
19
20from ndg.security.common.pylons.security_util import setSecuritySession, \
21    LoginServiceQuery
22
23import logging
24log = logging.getLogger(__name__)
25
26class BaseControllerError(Exception):
27    "Error handling for BaseController"
28   
29class BaseController(WSGIController):
30    def __call__(self, environ, start_response):       
31        # Insert any code to be run per request here. The Routes match
32        # is under environ['pylons.routes_dict'] should you want to check
33        # the action or route vars here
34        log.debug("BaseController.__call__ ...")
35
36        # construct URL picking up setting of server name from config to
37        # avoid exposing absolute URL hidden behind mod_proxy see #857
38        # Also, avoid returning to getCredentials and potentially exposing
39        # username/pass-phrase on URL.
40        pathInfo = urllib.quote(environ.get('PATH_INFO', '')) 
41        if 'getCredentials' in pathInfo:
42            log.debug("Reverting request URL from getCredentials to login...")
43            c.requestURL = g.ndg.security.server.ssoservice.cfg.server+'/login'       
44        else:
45            c.requestURL = g.ndg.security.server.ssoservice.cfg.server+pathInfo
46            query='&'.join(["%s=%s" % item for item in request.params.items()])
47            if query:
48                c.requestURL += '?' + query
49
50        log.debug("BaseController.__call__: c.requestURL = %s" % c.requestURL)
51
52       
53        return WSGIController.__call__(self, environ, start_response)
54   
55# Include the '_' function in the public names
56__all__ = [__name for __name in locals().keys() if not __name.startswith('_') \
57           or __name == '_']
Note: See TracBrowser for help on using the repository browser.