Changeset 3754


Ignore:
Timestamp:
04/04/08 10:11:04 (12 years ago)
Author:
pjkersha
Message:
 
Location:
TI12-security/trunk/python/ndg.security.server/ndg/security/server
Files:
1 deleted
10 edited
1 moved

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/sso/development.ini

    r3652 r3754  
    3939# Logging configuration 
    4040[loggers] 
    41 keys = root, sso 
     41keys = root, sso, ndg 
    4242 
    4343[handlers] 
     
    5656qualname = sso 
    5757 
     58 
     59[logger_ndg] 
     60level = DEBUG 
     61handlers = 
     62qualname = ndg 
     63 
    5864[handler_console] 
    5965class = StreamHandler 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/sso/sso.cfg

    r3699 r3754  
    22 
    33[DEFAULT] 
    4 layout:         /layout/ 
    5 icondir:        /layout/icons/ 
    6 disclaimer: 
    7  
    8 [NDG_SECURITY] 
    94# Server address for secure connections 
    105#sslServer: https://localhost 
     
    127sslServer: https://localhost/sso 
    138server:    http://localhost/sso 
     9layout:         %(server)s/layout/ 
     10icondir:        %(server)s/layout/icons/ 
     11disclaimer: 
    1412 
     13[NDG_SECURITY] 
    1514# Redirect SOAP output to a file e.g. open(<somefile>, 'w') 
    1615tracefile: None 
     
    2221 
    2322# WS-Security signature handler 
    24 # This is an application certificate ... (which may be a machine certificate) 
    25 # X.509 certificate sent with outbound signed messages 
    26 wssCertFilePath: certs/clnt.crt 
    27  
    28 # Private key used to sign messages 
    29 # This is an application certificate ... (which may be a machine certificate) 
    30 wssKeyFilePath: certs/clnt.key 
    31  
    32 # Password for private key - comment out if the file is not password protected 
    33 wssKeyPwd:  
    34  
    35 # Space separated list of CA cert. files to validate certs against when 
    36 # verifying responses 
    37 wssCACertFilePathList: certs/ndg-test-ca.crt 
    38  
    39 # Inclusive namespaces for Exclusive C14N 
    40 #wssRefInclNS: xmlns xsi xsd SOAP-ENV wsu wsse ns1 
    41 #wssSignedInfoInclNS: xsi xsd SOAP-ENV ds wsse ec 
    42 wssRefInclNS:  
    43 wssSignedInfoInclNS:  
     23wssCfgFilePath: ./wssecurity.cfg 
    4424 
    4525# SSL Connections 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/sso/sso/config/middleware.py

    r3652 r3754  
    1313from sso.config.environment import load_environment 
    1414 
    15 from sso.config.ssoMiddleware import SSOMiddleware 
     15from sso.config.ssoServiceMiddleware import SSOMiddleware 
    1616 
    1717def make_app(global_conf, full_stack=True, **app_conf): 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/sso/sso/config/ssoServiceMiddleware.py

    r3699 r3754  
    44P J Kershaw 18/03/08 
    55''' 
    6 from ndg.security.common.pylons.security_util import SecurityConfig 
     6 
     7class ndg: 
     8    '''Class structure to define a namespace for SSO Service config attached 
     9    Pylons global variable 'g' 
     10    ''' 
     11    class security: 
     12        class server: 
     13            class ssoservice: 
     14                cfg = None 
    715 
    816class SSOMiddleware: 
     
    1018    def __init__(self, app, cfgFilePath, appGlobals): 
    1119        self.app = app 
    12         self.config = SecurityConfig(cfgFilePath) 
    13         self.config.read() 
    14         appGlobals.securityCfg = self.config 
     20        ndg.security.server.ssoservice.cfg = SecurityConfig(cfgFilePath) 
     21        ndg.security.server.ssoservice.cfg.read() 
     22        appGlobals.ndg = ndg 
    1523           
    1624    def __call__(self, environ, start_response): 
    1725         
    18         environ['securityConfig'] = self.config 
     26#        environ['securityConfig'] = self.config 
    1927        return self.app(environ, start_response) 
     28 
     29 
     30import sys 
     31from ConfigParser import SafeConfigParser as ConfigParser 
     32from ndg.security.common.wssecurity import WSSecurityConfig 
     33 
     34class SecurityConfigError(Exception): 
     35    """Handle errors from parsing security config items""" 
     36        
     37class SecurityConfig(object): 
     38    """Get Security related parameters from the Pylons NDG config file""" 
     39 
     40    def __init__(self, cfgFilePath=None): 
     41        '''Get PKI settings for Attribute Authority and Session Manager from 
     42        the configuration file 
     43         
     44        @type cfgFilePath: pylons config file object 
     45        @param cfgFilePath: reference to NDG configuration file.  If omitted  
     46        defaults to request.environ['ndgConfig']''' 
     47         
     48        self.cfgFilePath = cfgFilePath 
     49        self.gk = None 
     50        self.wss = {} 
     51         
     52    def read(self): 
     53        '''Read content of config file into object''' 
     54        cfg = ConfigParser() 
     55        cfg.read(self.cfgFilePath) 
     56        
     57        tracefileExpr = cfg.get('NDG_SECURITY', 'tracefile') 
     58        if tracefileExpr: 
     59            self.tracefile = eval(tracefileExpr) 
     60 
     61        self.smURI = cfg.get('NDG_SECURITY', 'sessionMgrURI')         
     62        self.aaURI = cfg.get('NDG_SECURITY', 'attAuthorityURI') 
     63         
     64        # ... for SSL connections to security web services 
     65        try: 
     66            self.sslCACertFilePathList = \ 
     67            cfg.get('NDG_SECURITY', 'sslCACertFilePathList').split() 
     68                 
     69        except AttributeError: 
     70            raise SecurityConfigError, \ 
     71                        'No "sslCACertFilePathList" security setting' 
     72 
     73        self.sslPeerCertCN = cfg.get('NDG_SECURITY', 'sslPeerCertCN', None) 
     74 
     75        wssCfgFilePath = cfg.get('NDG_SECURITY', 'wssCfgFilePath', None) 
     76        wss = WSSecurityConfig() 
     77        wss.read(wssCfgFilePath) 
     78         
     79        # Cast to standard dict because WSSecurityConfig object can't be 
     80        # passed via **kw and dict(wss) doesn't work  
     81        # TODO: check for cleaner solution - dict(wss) 
     82        self.wss = dict(wss.items()) 
     83         
     84#        # ...and for WS-Security digital signature 
     85#        self.wssCertFilePath = cfg.get('NDG_SECURITY', 'wssCertFilePath') 
     86#        self.wssPriKeyFilePath = cfg.get('NDG_SECURITY', 'wssKeyFilePath') 
     87#        self.wssPriKeyPwd = cfg.get('NDG_SECURITY', 'wssKeyPwd') 
     88# 
     89#        try: 
     90#            self.wssCACertFilePathList = \ 
     91#                cfg.get('NDG_SECURITY', 'wssCACertFilePathList').split() 
     92#                 
     93#        except AttributeError: 
     94#            raise SecurityConfigError, \ 
     95#                                'No "wssCACertFilePathList" security setting' 
     96# 
     97#        # Inclusive namespace prefixes for Exclusive C14N 
     98#        try: 
     99#            self.wssRefInclNS = cfg.get('NDG_SECURITY', 'wssRefInclNS').split() 
     100#                 
     101#        except AttributeError: 
     102#            raise SecurityConfigError, 'No "wssRefInclNS" security setting' 
     103# 
     104#        try: 
     105#            self.wssSignedInfoInclNS = cfg.get('NDG_SECURITY',  
     106#                                               'wssSignedInfoInclNS').split()            
     107#        except AttributeError: 
     108#            raise SecurityConfigError, \ 
     109#                                    'No "wssSignedInfoInclNS" security setting' 
     110 
     111         
     112        # Gatekeeper params 
     113         
     114        # Attribute Certificate Issuer 
     115        self.acIssuer = cfg.get('NDG_SECURITY', 'acIssuer') 
     116         
     117        # verification of X.509 cert back to CA 
     118        try: 
     119            self.acCACertFilePathList = cfg.get('NDG_SECURITY',  
     120                                            'acCACertFilePathList').split()           
     121        except AttributeError: 
     122            raise SecurityConfigError, \ 
     123                                'No "acCACertFilePathList" security setting' 
     124 
     125        # Hostname 
     126        self.server=cfg.get('NDG_SECURITY', 'server', '') 
     127 
     128        # For secure connections 
     129        self.sslServer = cfg.get('NDG_SECURITY', 'sslServer', '') 
     130         
     131        # These URLs are referred from template files 
     132        self.getCredentials = '%s/getCredentials' % self.sslServer        
     133        self.logout = '%s/logout' % self.server 
     134                       
     135        # Where Are You From URI           
     136        self.wayfuri='%s/wayf' % self.server 
     137 
     138        self.localLink=cfg.get('layout', 'localLink', None) 
     139        self.localImage=cfg.get('layout', 'localImage', None) 
     140        self.localAlt=cfg.get('layout', 'localAlt', 'Visit Local Site') 
     141        self.ndgLink=cfg.get('layout', 'ndgLink', 'http://ndg.nerc.ac.uk') 
     142        self.ndgImage=cfg.get('layout', 'ndgImage', None) 
     143        self.ndgAlt=cfg.get('layout', 'ndgAlt','Visit NDG') 
     144        self.stfcLink=cfg.get('layout', 'stfcLink') 
     145        self.stfcImage=cfg.get('layout', 'stfcImage') 
     146        self.helpIcon=cfg.get('layout', 'helpIcon') 
     147        self.LeftAlt=cfg.get('layout', 'HdrLeftAlt') 
     148        self.LeftLogo=cfg.get('layout', 'HdrLeftLogo') 
     149        self.pageLogo="bodcHdr" 
     150        self.icons_xml=cfg.get('layout','Xicon') 
     151        self.icons_plot=cfg.get('layout','plot') 
     152        self.icons_prn=cfg.get('layout', 'printer') 
     153         
     154        self.disclaimer = cfg.get('DEFAULT', 'disclaimer') 
     155             
     156             
     157    def __repr__(self): 
     158        return '\n'.join(["%s=%s" % (k,v) for k,v in self.__dict__.items() \ 
     159                if k[:2] != "__"]) 
    20160     
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/sso/sso/controllers/login.py

    r3699 r3754  
    1414log = logging.getLogger(__name__) 
    1515 
    16 class LoginController(BaseController): 
    17      
    18 #    def __before__(self, action):  
    19 #        """For each action, get 'r' return to URL argument from current URL  
    20 #        query string.  c.returnTo is used in some of the .kid files""" 
    21 #        log.debug("LoginController.__before__ ...")    
    22 # 
    23 #        c.returnTo = request.params.get('r', '') 
    24          
    25 #        # Check return to address - getCredentials should NOT be returned to 
    26 #        # with its query args intact 
    27 #        b64decReturnTo = base64.urlsafe_b64decode(c.returnTo) 
    28 #        scheme, netloc, pathInfo, query, frag = urlsplit(b64decReturnTo) 
    29 #        if 'getCredentials' in pathInfo: 
    30 #            # Swap to discovery and remove sensitive creds query args 
    31 #            # 
    32 #            # TODO: re-write to be more robust and modular.  Nb.  
    33 #            # BaseController.__call__ should filter out 'getCredentials' 
    34 #            # calls from c.requestURL so this code should never need to be  
    35 #            # executed. 
    36 #            filteredReturnTo = urlunsplit((scheme,netloc,'/login','','')) 
    37 #            c.returnTo = base64.urlsafe_b64encode(filteredReturnTo) 
    38 #         
    39 #        # Check return to address - getCredentials should NOT be returned to 
    40 #        # with its query args intact 
    41 #        log.debug("LoginController.__before__: Decoded c.returnTo = %s" % \ 
    42 #                                      base64.urlsafe_b64decode(c.returnTo)) 
    43          
     16class LoginController(BaseController):         
    4417         
    4518    def index(self): 
    46         ''' ''' 
     19        '''Initialise Session Manager client context, check for an existing 
     20        user session.  If found, redirect back to SSO Client, if not found 
     21        present login''' 
    4722        log.debug("LoginController.index ...")    
    4823 
     
    5328            log.debug('No security session details found - offering login...') 
    5429            return render('ndg.security.login') 
    55  
    56         # Inclusive namespace prefixes for WS-Security digital signature 
    57         # (Exclusive C14N only) 
    58         refC14nKw={'unsuppressedPrefixes':g.securityCfg.wssRefInclNS} 
    59         signedInfoC14nKw = {'unsuppressedPrefixes': 
    60                             g.securityCfg.wssSignedInfoInclNS} 
    6130         
    6231        # Session is set in this domain - check it  
    6332        try:     
    6433            smClnt = SessionMgrClient(uri=session['ndgSec']['h'], 
    65                     sslCACertFilePathList=g.securityCfg.sslCACertFilePathList, 
    66                     sslPeerCertCN=g.securityCfg.sslPeerCertCN, 
    67                     signingCertFilePath=g.securityCfg.wssCertFilePath, 
    68                     signingPriKeyFilePath=g.securityCfg.wssPriKeyFilePath, 
    69                     signingPriKeyPwd=g.securityCfg.wssPriKeyPwd, 
    70                     caCertFilePathList=g.securityCfg.wssCACertFilePathList, 
    71                     refC14nKw=refC14nKw, 
    72                     signedInfoC14nKw=signedInfoC14nKw, 
    73                     tracefile=g.securityCfg.tracefile) 
     34                    tracefile=g.ndg.security.server.ssoservice.cfg.tracefile, 
     35                    **g.ndg.security.server.ssoservice.cfg.wss) 
    7436                                 
    7537        except Exception, e: 
     
    11981            return render('ndg.security.login') 
    12082         
    121         # Inclusive namespace prefixes for WS-Security digital signature 
    122         # (Exclusive C14N only) 
    123         refC14nKw={'unsuppressedPrefixes':g.securityCfg.wssRefInclNS} 
    124         signedInfoC14nKw = {'unsuppressedPrefixes': 
    125                             g.securityCfg.wssSignedInfoInclNS} 
    126  
    12783        try:     
    128             smClnt = SessionMgrClient(uri=g.securityCfg.smURI, 
    129                     sslCACertFilePathList=g.securityCfg.sslCACertFilePathList, 
    130                     sslPeerCertCN=g.securityCfg.sslPeerCertCN, 
    131                     signingCertFilePath=g.securityCfg.wssCertFilePath, 
    132                     signingPriKeyFilePath=g.securityCfg.wssPriKeyFilePath, 
    133                     signingPriKeyPwd=g.securityCfg.wssPriKeyPwd, 
    134                     caCertFilePathList=g.securityCfg.wssCACertFilePathList, 
    135                     refC14nKw=refC14nKw, 
    136                     signedInfoC14nKw=signedInfoC14nKw, 
    137                     tracefile=g.securityCfg.tracefile) 
     84            smClnt = SessionMgrClient(\ 
     85                    uri=g.ndg.security.server.ssoservice.cfg.smURI, 
     86                    tracefile=g.ndg.security.server.ssoservice.cfg.tracefile, 
     87                    **g.ndg.security.server.ssoservice.cfg.wss) 
    13888                                 
    13989            username = request.params['username'] 
     
    14999        # Connect to Session Manager 
    150100        log.debug('Calling Session Manager "%s" connect for user "%s" ...' % \ 
    151                   (g.securityCfg.smURI, username)) 
     101                  (g.ndg.security.server.ssoservice.cfg.smURI, username)) 
    152102        try: 
    153103            sessID = smClnt.connect(username, passphrase=passphrase)[-1] 
     
    156106                    "pass-phrase and try again." 
    157107            log.error("Session Manager connect returned: %s" % e) 
    158             raise e 
    159108            response.status_code = 401 
    160109            return render('ndg.security.login') 
     
    165114            # Make request for attribute certificate 
    166115            attCert = smClnt.getAttCert(sessID=sessID,  
    167                                         attAuthorityURI=g.securityCfg.aaURI) 
     116                    attAuthorityURI=g.ndg.security.server.ssoservice.cfg.aaURI) 
    168117        except SessionExpired, e: 
    169118            log.info("Session expired getting Attribute Certificate: %s" % e) 
     
    189138         
    190139        # Make security session details 
    191         setSecuritySession(h=g.securityCfg.smURI, 
     140        setSecuritySession(h=g.ndg.security.server.ssoservice.cfg.smURI, 
    192141                           u=username, 
    193142                           org=attCert.issuerName, 
     
    235184            log.debug("Checking return-to URL for valid SSL peer cert. ...") 
    236185 
    237             # Inclusive namespace prefixes for WS-Security digital signature 
    238             # (Exclusive C14N only) 
    239             refC14nKw = {'unsuppressedPrefixes':g.securityCfg.wssRefInclNS} 
    240             signedInfoC14nKw = {'unsuppressedPrefixes': 
    241                                 g.securityCfg.wssSignedInfoInclNS} 
    242186             
    243187            # Look-up list of Cert DNs for trusted requestors 
    244             aaClnt = AttAuthorityClient(uri=g.securityCfg.aaURI, 
    245                         signingCertFilePath=g.securityCfg.wssCertFilePath, 
    246                         signingPriKeyFilePath=g.securityCfg.wssPriKeyFilePath, 
    247                         signingPriKeyPwd=g.securityCfg.wssPriKeyPwd, 
    248                         caCertFilePathList=g.securityCfg.wssCACertFilePathList, 
    249                         refC14nKw=refC14nKw, 
    250                         signedInfoC14nKw=signedInfoC14nKw, 
    251                         tracefile=g.securityCfg.tracefile) 
     188            aaClnt = AttAuthorityClient(\ 
     189                    uri=g.ndg.security.server.ssoservice.cfg.aaURI, 
     190                    tracefile=g.ndg.security.server.ssoservice.cfg.tracefile, 
     191                    **g.ndg.security.server.ssoservice.cfg.wss) 
    252192             
    253193            HostInfo = aaClnt.getAllHostsInfo() 
     
    256196            log.debug(\ 
    257197            "Attribute Authority [%s] expecting DN for SSL peer one of: %s" % \ 
    258                       (g.securityCfg.aaURI, requestServerDN)) 
     198                (g.ndg.security.server.ssoservice.cfg.aaURI, requestServerDN)) 
    259199            hostCheck=HostCheck(acceptedDNs=requestServerDN, 
    260                     caCertFilePathList=g.securityCfg.sslCACertFilePathList)             
     200                    caCertFilePathList=g.ndg.security.server.ssoservice.cfg.sslCACertFilePathList)             
    261201            testConnection = HTTPSConnection(returnToURLHostname,  
    262202                                             None,  
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/sso/sso/controllers/logout.py

    r3699 r3754  
    1515    session cookie content 
    1616    ''' 
    17 #     
    18 #    def __before__(self): 
    19 #        """Get return to URL""" 
    20 #        log.debug("LogoutController.__before__ ...") 
    21 #        log.debug("LogoutController.__before__ ...") 
    22 # 
    23 #        c.returnTo = request.params.get('r', '') 
    24 #         
    25 #        # Check return to address - getCredentials should NOT be returned to 
    26 #        # with its query args intact 
    27 #        try: 
    28 #            b64decReturnTo = base64.urlsafe_b64decode(c.returnTo) 
    29 #        except Exception, e: 
    30 #            log.error("Decoding return to address: %s" % e) 
    31 #            return 
    32 #         
    33 #        scheme, netloc, pathInfo, query, frag = urlsplit(b64decReturnTo) 
    34 ##        if 'getCredentials' in pathInfo: 
    35 ##            # Swap back to login and remove sensitive creds query args 
    36 ##            # 
    37 ##            # TODO: re-write to be more robust and modular.  Nb.  
    38 ##            # BaseController.__call__ should filter out 'getCredentials' 
    39 ##            # calls from c.requestURL so this code should never need to be  
    40 ##            # executed. 
    41 ##            filteredReturnTo = urlunsplit((scheme,netloc,'/login','','')) 
    42 ##            c.returnTo = base64.urlsafe_b64encode(filteredReturnTo) 
    4317 
    4418     
     
    5428            return self._redirect() 
    5529         
    56         # Fixed URI to be equal to the session's security settings 'h' param! 
    57         # This contains the location of the Session Manager where the users 
    58         # session is held. 
    59         # 
    60  
    61          
    62         # Inclusive namespace prefixes for WS-Security digital signature 
    63         # (Exclusive C14N only) 
    64         refC14nKw={'unsuppressedPrefixes':g.securityCfg.wssRefInclNS} 
    65         signedInfoC14nKw = {'unsuppressedPrefixes': 
    66                             g.securityCfg.wssSignedInfoInclNS} 
    67  
    6830        try: 
    6931            smClnt = SessionMgrClient(uri=session['ndgSec']['h'], 
    70                     sslCACertFilePathList=g.securityCfg.sslCACertFilePathList, 
    71                     signingCertFilePath=g.securityCfg.wssCertFilePath, 
    72                     signingPriKeyFilePath=g.securityCfg.wssPriKeyFilePath, 
    73                     signingPriKeyPwd=g.securityCfg.wssPriKeyPwd, 
    74                     caCertFilePathList=g.securityCfg.wssCACertFilePathList, 
    75                     refC14nKw=refC14nKw, 
    76                     signedInfoC14nKw=signedInfoC14nKw, 
    77                     tracefile=g.securityCfg.tracefile)        
     32                    tracefile=g.ndg.security.server.ssoservice.cfg.tracefile, 
     33                    **g.ndg.security.server.ssoservice.cfg.wss)        
    7834        except Exception, e: 
    7935            log.error("logout - creating Session Manager client: %s" % e) 
     
    8238        # Disconnect from Session Manager 
    8339        log.info('Calling Session Manager "%s" disconnect for logout...' % \ 
    84                  g.securityCfg.smURI) 
     40                 session['ndgSec']['h']) 
    8541        try: 
    8642            smClnt.disconnect(sessID=session['ndgSec']['sid']) 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/sso/sso/controllers/wayf.py

    r3658 r3754  
    2828        # Ensure login can return to an address over https to  
    2929        # preserve confidentiality of credentials 
    30         if g.securityCfg.server in c.returnTo: 
    31             c.returnTo = c.returnTo.replace(g.securityCfg.server,  
    32                                             g.securityCfg.sslServer) 
     30        if g.ndg.security.server.ssoservice.cfg.server in c.returnTo: 
     31            c.returnTo = c.returnTo.replace(g.ndg.security.server.ssoservice.cfg.server,  
     32                                            g.ndg.security.server.ssoservice.cfg.sslServer) 
    3333            c.b64encReturnTo = urlsafe_b64encode(c.returnTo)         
    3434            log.debug(\ 
    3535    "WayfController.__before__: switched return to address to https = %s" % \ 
    3636                                                              c.returnTo)  
    37 #         
    38 #        # Check return to address - getCredentials should NOT be returned to 
    39 #        # with its query args intact 
    40 #        b64decReturnTo = base64.urlsafe_b64decode(c.returnTo) 
    41 #        scheme, netloc, pathInfo, query, frag = urlsplit(b64decReturnTo) 
    42 #        if 'getCredentials' in pathInfo: 
    43 #            # Swap to discovery and remove sensitive creds query args 
    44 #            # 
    45 #            # TODO: re-write to be more robust and modular.  Nb.  
    46 #            # BaseController.__call__ should filter out 'getCredentials' 
    47 #            # calls from c.requestURL so this code should never need to be  
    48 #            # executed. 
    49 #            filteredReturnTo = urlunsplit((scheme,netloc,'/login','','')) 
    50 #            c.returnTo = base64.urlsafe_b64encode(filteredReturnTo) 
    51 #         
    52 #        # Check return to address - getCredentials should NOT be returned to 
    53 #        # with its query args intact 
    54 #        log.debug("LoginController.__before__: Decoded c.returnTo = %s" % \ 
    55 #                                      base64.urlsafe_b64decode(c.returnTo)) 
     37 
    5638 
    5739    def index(self): 
     
    5941        log.debug("WayfController.index ...") 
    6042 
    61         # Inclusive namespace prefixes for WS-Security digital signature 
    62         # (Exclusive C14N only) 
    63         refC14nKw = {'unsuppressedPrefixes':g.securityCfg.wssRefInclNS} 
    64         signedInfoC14nKw = {'unsuppressedPrefixes': 
    65                             g.securityCfg.wssSignedInfoInclNS} 
    66          
    67         aaClnt = AttAuthorityClient(uri=g.securityCfg.aaURI, 
    68                         signingCertFilePath=g.securityCfg.wssCertFilePath, 
    69                         signingPriKeyFilePath=g.securityCfg.wssPriKeyFilePath, 
    70                         signingPriKeyPwd=g.securityCfg.wssPriKeyPwd, 
    71                         caCertFilePathList=g.securityCfg.wssCACertFilePathList, 
    72                         refC14nKw=refC14nKw, 
    73                         signedInfoC14nKw=signedInfoC14nKw, 
    74                         tracefile=g.securityCfg.tracefile) 
     43        aaClnt = AttAuthorityClient(\ 
     44                    uri=g.ndg.security.server.ssoservice.cfg.aaURI, 
     45                    tracefile=g.ndg.security.server.ssoservice.cfg.tracefile, 
     46                    **g.ndg.security.server.ssoservice.cfg.wss) 
    7547 
    7648        # Get list of login uris for trusted sites including THIS one 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/sso/sso/lib/base.py

    r3699 r3754  
    2828     
    2929class BaseController(WSGIController): 
    30     count = 0 
    3130    def __call__(self, environ, start_response):         
    3231        # Insert any code to be run per request here. The Routes match 
    3332        # is under environ['pylons.routes_dict'] should you want to check 
    3433        # the action or route vars here 
    35         BaseController.count += 1 
    36         log.debug("BaseController.__call__ %02d ..." % BaseController.count) 
     34        log.debug("BaseController.__call__ ...") 
    3735 
    3836        # construct URL picking up setting of server name from config to  
     
    4341        if 'getCredentials' in pathInfo: 
    4442            log.debug("Reverting request URL from getCredentials to login...") 
    45             c.requestURL = g.securityCfg.server + '/login'        
     43            c.requestURL = g.ndg.security.server.ssoservice.cfg.server+'/login'        
    4644        else: 
    47             c.requestURL = g.securityCfg.server + pathInfo 
     45            c.requestURL = g.ndg.security.server.ssoservice.cfg.server+pathInfo 
    4846            query='&'.join(["%s=%s" % item for item in request.params.items()]) 
    4947            if query: 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/sso/sso/templates/ndg/security/login.kid

    r3724 r3754  
     1<html py:extends="'ndgPage.kid'" xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#"> 
     2     
     3    <div py:def="loginForm()" class="loginForm"> 
     4        <form action="$g.ndg.security.server.ssoservice.cfg.getCredentials" method="POST"> 
     5            <input type="hidden" name="r" value="${c.b64encReturnTo}"/> 
     6            <table cellspacing="0" border="0" cellpadding="5"> 
     7                <tr> 
     8                    <td>Username:</td>  
     9                    <td><input type="text" name="username" value=""/></td> 
     10                </tr><tr> 
     11                    <td>Pass-phrase:</td> 
     12                    <td><input type="password" name="passphrase"/></td> 
     13                </tr><tr> 
     14                    <td colspan="2" align="right"> 
     15                    <input type="submit" value="Login"/></td> 
     16                </tr> 
     17            </table> 
     18        </form> 
     19    </div> 
     20     
     21    <head> 
     22    <replace py:replace="pagehead()"/> 
     23    </head> 
     24    <body> 
     25        <div py:replace="header()"/> 
     26        <div class="loginContent" style="text-indent:5px">         
     27            <h4>Login</h4> 
     28            <div py:replace="loginForm()"/> 
     29            <p>${c.xml}</p> 
     30        </div> 
     31        <div py:replace="footer(showLoginStatus=False)"/> 
     32    </body> 
     33 
     34</html> 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/sso/sso/templates/ndg/security/ndgPage.kid

    r3724 r3754  
     1<!-- This is a bunch of named templates for use in pages --> 
     2<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#"> 
     3     
     4    <!-- HTML Header and Document header follow --> 
     5     
     6    <head py:def="pagehead()" py:strip="True"> 
     7        <title py:content="c.title">title</title> 
     8        <!--! The following includes the javascript, note that the XML 
     9        function is needed to avoid escaping the < character --> 
     10        ${XML(h.javascript_include_tag(builtins=True))} 
     11        <script type="text/javascript" src="$g.ndg.security.server.ssoservice.cfg.server/js/toggleDiv.js"/> 
     12 
     13        <link media="all, screen" href="$g.ndg.security.server.ssoservice.cfg.server/layout/ndg2.css" type="text/css" rel="stylesheet"/> 
     14        <link rel="icon" type="image/ico" href="$g.ndg.security.server.ssoservice.cfg.server/layout/favicon.jpg" /> 
     15 
     16    </head> 
     17 
     18    <div py:def="header()"> 
     19        <div id="header"/> 
     20        <div id="logo"><img src="$g.ndg.security.server.ssoservice.cfg.LeftLogo" alt="$g.ndg.security.server.ssoservice.cfg.LeftAlt" /></div> 
     21    </div> 
     22     
     23    <div py:def="PageTabs(tabv)" id="PageTabs"> 
     24        <div id="PageTabRow"> 
     25            <ul> 
     26                <span py:for="tab in c.pageTabs"> 
     27                    <?python 
     28                    linkto=True 
     29                    if tab[0] == tabv:  
     30                        status='current' 
     31                        linkto=False 
     32                    else: status='hidden' 
     33                    ?> 
     34                    <li class="$status"><span class="pagetab"> 
     35                        ${XML(h.link_to_if(linkto,tab[0],tab[1]))} 
     36                    </span></li>  
     37                 </span> 
     38            </ul> 
     39        </div> 
     40        <div class="line"/> 
     41        <div class="clear"/> 
     42    </div> 
     43    <py if="c.UpdatePageTabs" py:replace="PageTabs(c.current)"/> 
     44 
     45    <!-- Page Footer follows --> 
     46    <div py:def="footer(showLoginStatus=True)" id="Footer"> 
     47        <center><table><tbody> 
     48            <tr> 
     49                <td align="left" width="60%"> 
     50                    <table><tbody> 
     51                    <tr><td><span py:replace="linkimage(g.ndg.security.server.ssoservice.cfg.ndgLink,g.ndg.security.server.ssoservice.cfg.ndgImage,'NDG')"/></td> 
     52                    <td> This portal is a product of the <a href="http://ndg.nerc.ac.uk"> NERC DataGrid</a> 
     53                    ${g.ndg.security.server.ssoservice.cfg.disclaimer} </td> 
     54                    </tr> 
     55                    </tbody></table> 
     56                </td> 
     57                <td width="40%" align="center"> 
     58                    <div id="loginStatus" py:if="showLoginStatus==True"> 
     59                        <!--! now we choose one of the next two (logged in or not) --> 
     60                        <div py:if="'ndgSec' in session"><table><tbody><tr><td>  
     61                        User [${session['ndgSec']['u']}] logged in at  
     62                        ${session['ndgSec']['org']} with roles  
     63                        [${len(session['ndgSec']['roles'])==1 and session['ndgSec']['roles'][0] or ', '.join(session['ndgSec']['roles'])}]</td><td> 
     64                        &nbsp;<span py:replace="logOut()"/></td></tr></tbody></table></div> 
     65                        <div py:if="'ndgSec' not in session">Further services maybe available if you can 
     66                            <span py:replace="logIn()"/></div> 
     67                    </div> 
     68                </td> 
     69                <td align="right"><span py:replace="linkimage(g.ndg.security.server.ssoservice.cfg.stfcLink,g.ndg.security.server.ssoservice.cfg.stfcImage,'Hosted by the STFC CEDA')"/></td> 
     70            </tr> 
     71        </tbody></table></center> 
     72    </div> 
     73     
     74    <!-- Utility Functions follow --> 
     75     
     76    <!-- hyperlinked image --> 
     77    <span py:def="linkimage(linkref,imageref,alttext)"> 
     78        <a href="$linkref"><image src="$imageref" alt="$alttext" title="$alttext"/></a> 
     79    </span> 
     80     
     81    <!-- Help Icons --> 
     82    <span py:def="helpIcon(value)"> 
     83        <span> 
     84            <a href="javascript:;" title="Toggle help" onclick="toggleDiv(1,'$value','shown','hidden','div'); return false;"> 
     85            <img src="$g.ndg.security.server.ssoservice.cfg.helpIcon" alt="Toggle help" class="helpicon"/></a> 
     86       
     87        </span> 
     88    </span> 
     89     
     90    <!-- Login and out buttons -->     
     91    <span py:def="logOut()" class="logOut"> 
     92        <form action="$g.ndg.security.server.ssoservice.cfg.logout"> 
     93            <input type="hidden" name="r" value="${c.b64encReturnTo}"/> 
     94            <input type="submit" value="Logout"/> 
     95        </form> 
     96    </span> 
     97     
     98    <span py:def="logIn()" class="logIn"> 
     99        <?python 
     100        from base64 import urlsafe_b64encode 
     101         
     102        # Base 64 encode to enable passing around in 'r' argument of query 
     103        # string for use with login/logout 
     104        c.returnTo = c.requestURL 
     105        c.b64encReturnTo = urlsafe_b64encode(c.requestURL) 
     106        ?> 
     107        <form action="$g.ndg.security.server.ssoservice.cfg.wayfuri"> 
     108            <input type="hidden" name="r" value="${c.b64encReturnTo}"/> 
     109            <input type="submit" value="Login"/> 
     110        </form> 
     111    </span> 
     112     
     113     
     114     
     115</html> 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/sso/sso/templates/ndg/security/wayf.kid

    r3724 r3754  
     1<html py:extends="'ndgPage.kid'" xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#"> 
     2    <head> 
     3    <replace py:replace="pagehead()"/> 
     4    </head> 
     5    <body> 
     6        <div py:replace="header()"/> 
     7        <div class="wayfContent" style="text-indent:5px">         
     8        <h4> Where are you from? </h4> 
     9        <p> You can login in at: 
     10        <?python 
     11        # Sort alphabetically 
     12        providerNames = c.providers.keys() 
     13        providerNames.sort() 
     14        ?> 
     15        <ul py:for="h in providerNames"> 
     16            <li> <a href="${c.providers[h]}?r=${c.b64encReturnTo}">${h}</a></li> 
     17        </ul></p> 
     18        <p>Before clicking on these links, please check that the links redirect to a site 
     19        you trust with your security credentials.</p> 
     20        <p> How can I tell?  For any of the above, following login you will be  
     21        redirected back to the URL: <a href="${c.returnTo}">${c.returnTo}</a></p> 
     22                </div> 
     23        <div py:replace="footer()"/> 
     24    </body> 
     25     
     26        <div py:def="footer(showLoginStatus=False)" id="Footer"> 
     27        <center><table><tbody> 
     28            <tr> 
     29                <td align="center" width="60%"> 
     30                    <table><tbody> 
     31                    <tr><td><span py:replace="linkimage(g.ndg.security.server.ssoservice.cfg.ndgLink,g.ndg.security.server.ssoservice.cfg.ndgImage,'NDG')"/></td> 
     32                    <td> This portal is a product of the <a href="http://ndg.nerc.ac.uk"> NERC DataGrid</a> 
     33                    Not all functionality is completely implemented, bugs and problems are expected </td> 
     34                    </tr> 
     35                    </tbody></table> 
     36                </td> 
     37                <td width="40%" align="center"> 
     38                    <div id="loginStatus"> 
     39                        <!--! now we choose one of the next two (logged in or not) --> 
     40                        <div py:if="'ndgSec' in session"><table><tbody><tr><td> User [${session['ndgSec']['u']}] logged in 
     41                        at [${session['ndgSec']['h']}] with roles [${session['ndgSec']['roles']}]</td><td> 
     42                        &nbsp;<span py:replace="logOut()"/></td></tr></tbody></table></div> 
     43                        <div py:if="'ndgSec' not in session"></div> 
     44                    </div> 
     45                </td> 
     46                <td><span py:replace="linkimage(g.ndg.security.server.ssoservice.cfg.stfcLink,g.ndg.security.server.ssoservice.cfg.stfcImage,'Hosted by the STFC CEDA')"/></td> 
     47            </tr> 
     48        </tbody></table></center> 
     49    </div> 
     50</html> 
Note: See TracChangeset for help on using the changeset viewer.