Changeset 4279


Ignore:
Timestamp:
03/10/08 16:43:28 (11 years ago)
Author:
pjkersha
Message:

Major refactoring of CredWallet? and SessionMgr? to allow for non-user based X.509 certificates.

Location:
TI12-security/trunk/python
Files:
11 added
1 deleted
13 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/Tests/SessionMgrTest.py

    r1639 r4279  
    1515        pass 
    1616 
    17     def testExplicitReadPropAndLoadCredReposInt(self): 
     17    def testExplicitReadPropAndLoadCredentialRepositoryInt(self): 
    1818        '''Test for loading Credential Repository SEPARATE to __init__''' 
    1919        sessMgr = SessionMgr() 
    2020        sessMgr.readProperties(self.propFilePath) 
    21         sessMgr.loadCredReposInterface() 
     21        sessMgr.loadCredentialRepositoryInterface() 
    2222         
    23     def testCredReposAudit(self): 
     23    def testCredentialRepositoryAudit(self): 
    2424        import pdb;pdb.set_trace() 
    25         self.sessMgr.auditCredRepos() 
     25        self.sessMgr.auditCredentialRepository() 
    2626                                
    2727class SessionMgrTestSuite(unittest.TestSuite): 
    2828    def __init__(self): 
    2929        map = map(SessionMgrTestCase, 
    30                   (testExplicitReadPropAndLoadCredReposInt, 
    31                    testCredReposAudit) 
     30                  (testExplicitReadPropAndLoadCredentialRepositoryInt, 
     31                   testCredentialRepositoryAudit) 
    3232                 ) 
    3333        unittest.TestSuite.__init__(self, map) 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/CredWallet.py

    r4156 r4279  
    55__author__ = "P J Kershaw" 
    66__date__ = "30/11/05" 
    7 __copyright__ = "(C) 2007 STFC & NERC" 
     7__copyright__ = "(C) 2008 STFC & NERC" 
    88__license__ = \ 
    99"""This software may be distributed under the terms of the Q Public  
     
    3434        NoMatchingRoleInTrustedHosts 
    3535    aaImportError = False 
    36      
    37     # Reference 'X509PKIPathv1' BinarySecurityToken ValueType 
    38     from wssecurity.dom import SignatureHandler 
    3936except ImportError: 
    4037    log.warning('Loading CredWallet without SOAP interface imports') 
     
    4845    aaImportError = False 
    4946except: 
    50     log.warning(\ 
    51             'Loading CredWallet for SOAP interface to Attribute Authority') 
     47    log.warning('Loading CredWallet without Attribute Authority interface ' 
     48                'imports') 
    5249    pass 
    5350 
    5451if aaImportError: 
    55     raise ImportError, \ 
    56         "Either AttAuthority or AttAuthorityClient classes must be " + \ 
    57         "present to allow interoperation with Attribute Authorities" 
     52    raise ImportError("Either AttAuthority or AttAuthorityClient classes must " 
     53                      "be present to allow interoperation with Attribute " 
     54                      "Authorities") 
    5855 
    5956# Authentication X.509 Certificate 
     
    6360# Authorisation - attribute certificate  
    6461from ndg.security.common.AttCert import * 
     62from ndg.security.common.wssecurity.dom import SignatureHandler 
     63 
     64# generic parser to read INI/XML properties file 
     65from ndg.security.common.utils.ConfigFileParsers import \ 
     66                                                    readAndValidateProperties 
    6567 
    6668 
     
    7274        Exception.__init__(self, msg) 
    7375 
    74 #_____________________________________________________________________________ 
     76 
    7577class CredWalletError(_CredWalletException):     
    76     """Exception handling for NDG Credential Wallet class.  Overrides Exception to  
    77     enable writing to the log""" 
    78  
    79  
    80 #_____________________________________________________________________________ 
     78    """Exception handling for NDG Credential Wallet class.  Overrides Exception 
     79    to enable writing to the log""" 
     80 
     81 
    8182class CredWalletAttributeRequestDenied(CredWalletError):     
    8283    """Handling exception where CredWallet is denied authorisation by an 
     
    106107        details of Attribute Authority URI and roles for trusted hosts""" 
    107108         
    108         if 'trustedHostInfo' in kw: 
    109             self.__trustedHostInfo = kw['trustedHostInfo'] 
    110             del kw['trustedHostInfo'] 
    111         else: 
    112             self.__trustedHostInfo = {} 
    113              
    114         if 'extAttCertList' in kw: 
    115             self.__extAttCertList = kw['extAttCertList'] 
    116             del kw['extAttCertList'] 
    117         else:     
    118             self.__extAttCertList = [] 
     109        self.__trustedHostInfo = kw.pop('trustedHostInfo', {}) 
     110        self.__extAttCertList = kw.pop('extAttCertList', []) 
    119111             
    120112        CredWalletError.__init__(self, *args, **kw) 
    121113 
    122     def __getTrustedHostInfo(self): 
     114    def _getTrustedHostInfo(self): 
    123115        """Get message text""" 
    124         return self.__msg 
    125  
    126     trustedHostInfo = property(fget=__getTrustedHostInfo,  
     116        return self.__trustedHostInfo 
     117 
     118    trustedHostInfo = property(fget=_getTrustedHostInfo,  
    127119                               doc="URI and roles details for trusted hosts") 
    128120        
    129     def __getExtAttCertList(self): 
     121    def _getExtAttCertList(self): 
    130122        """Return list of candidate Attribute Certificates that could be used 
    131123        to try to get a mapped certificate from the target Attribute Authority 
     
    133125        return self.__extAttCertList 
    134126 
    135     extAttCertList = property(fget=__getExtAttCertList, 
    136                               doc="list of candidate Attribute " + \ 
    137                               "Certificates that could be used " + \ 
    138                               "to try to get a mapped certificate " + \ 
    139                               "from the target Attribute Authority") 
     127    extAttCertList = property(fget=_getExtAttCertList, 
     128                              doc="list of candidate Attribute Certificates " 
     129                              "that could be used to try to get a mapped " 
     130                              "certificate from the target Attribute " 
     131                              "Authority") 
    140132 
    141133           
    142 #_____________________________________________________________________________ 
    143134class _MetaCredWallet(type): 
    144135    """Enable CredWallet to have read only class variables e.g. 
     
    152143    ... raises - AttributeError: can't set attribute""" 
    153144     
    154     def __getAccessDenied(cls): 
     145    def _getAccessDenied(cls): 
    155146        '''accessDenied get method''' 
    156147        return False 
    157148     
    158     accessDenied = property(fget=__getAccessDenied) 
    159      
    160     def __getAccessGranted(cls): 
     149    accessDenied = property(fget=_getAccessDenied) 
     150     
     151    def _getAccessGranted(cls): 
    161152        '''accessGranted get method''' 
    162153        return True 
    163154     
    164     accessGranted = property(fget=__getAccessGranted) 
    165  
    166 #_____________________________________________________________________________         
     155    accessGranted = property(fget=_getAccessGranted) 
     156 
     157 
    167158# CredWallet is a 'new-style' class inheriting from "object" and making use 
    168159# of new Get/Set methods for hiding of attributes 
     
    170161    """Volatile store of user credentials associated with a user session 
    171162     
    172     @type __credRepos: ndg.security.common.CredRepos or derivative 
    173     @ivar __credRepos: reference to Credential Repository object.  An optional 
    174     non-volatile cache for storage of wallet info when  
    175  
    176     @type __mapFromTrustedHosts: bool 
    177     @ivar __mapFromTrustedHosts: if true, allow a mapped attribute certificate 
     163    @type __credentialRepository: ndg.security.common.CredentialRepository or  
     164    derivative 
     165    @ivar __credentialRepository: reference to Credential Repository object.   
     166    An optional non-volatile cache for storage of wallet info which can be 
     167    later restored  
     168 
     169    @type _mapFromTrustedHosts: bool 
     170    @ivar _mapFromTrustedHosts: if true, allow a mapped attribute certificate 
    178171    to obtained in a getAttCert call.  Set false to prevent mappings. 
    179172 
    180     @type __rtnExtAttCertList: bool 
    181     @ivar __rtnExtAttCertList: if true, return a list of external attribute  
     173    @type _rtnExtAttCertList: bool 
     174    @ivar _rtnExtAttCertList: if true, return a list of external attribute  
    182175    certificates from getAttCert call 
    183176 
     
    185178    @ivar __dn: distinguished name from user certificate 
    186179 
    187     @type __credentials: dict        
    188     @ivar __credentials: Credentials are stored as a dictionary one element per attribute 
    189     certicate held and indexed by certificate issuer name 
    190  
    191     @type __caCertFilePathList: basestring, list, tuple or None 
    192     @ivar __caCertFilePathList: file path(s) to CA certificates.  If None 
     180    @type _credentials: dict        
     181    @ivar _credentials: Credentials are stored as a dictionary one element per 
     182    attribute certificate held and indexed by certificate issuer name 
     183 
     184    @type _caCertFilePathList: basestring, list, tuple or None 
     185    @ivar _caCertFilePathList: file path(s) to CA certificates.  If None 
    193186    then the input is quietly ignored.  See caCertFilePathList property 
    194187 
    195     @type __userCert: ndg.security.common.X509.X509Cert 
    196     @ivar __userCert: X.509 user certificate instance 
    197  
    198     @type __issuingCert: ndg.security.common.X509.X509Cert 
    199     @ivar __issuingCert: X.509 user certificate instance 
     188    @type _userX509Cert: ndg.security.common.X509.X509Cert 
     189    @ivar _userX509Cert: X.509 user certificate instance 
     190 
     191    @type _issuingX509Cert: ndg.security.common.X509.X509Cert 
     192    @ivar _issuingX509Cert: X.509 user certificate instance 
    200193  
    201     @type __userPriKey: M2Crypto.RSA.RSA 
    202     @ivar __userPriKey: Private key used to sign outbound message 
     194    @type _userPriKey: M2Crypto.RSA.RSA 
     195    @ivar _userPriKey: Private key used to sign outbound message 
    203196    """ 
    204197 
    205198    __metaclass__ = _MetaCredWallet 
    206      
    207     def __init__(self, 
    208                  userCert, 
    209                  userPriKey, 
    210                  issuingCert=None, 
    211                  caCertFilePathList=None, 
    212                  aaURI=None, 
    213                  aaPropFilePath=None, 
    214                  credRepos=None, 
    215                  mapFromTrustedHosts=False, 
    216                  rtnExtAttCertList=True, 
    217                  attCertRefreshElapse=7200, 
    218                  wssSignatureHandlerKw={}): 
     199 
     200    _defParam = dict(username=None, 
     201                     userCreds=None, 
     202                     caCertFilePathList=None, 
     203                     attributeAuthorityURI=None, 
     204                     attributeAuthority=None, 
     205                     credentialRepository=None, 
     206                     mapFromTrustedHosts=False, 
     207                     rtnExtAttCertList=True, 
     208                     attCertRefreshElapse=7200, 
     209                     wssSignatureHandlerKw={}) 
     210     
     211    __slots__ = _defParam.keys() + [ 
     212        'accessDenied', 
     213        '_userX509Cert', 
     214        '_userPriKey', 
     215        '_issuingX509Cert', 
     216        '_attributeAuthorityClnt', 
     217        '_attributeAuthority', 
     218        '_caCertFilePathList', 
     219         
     220    ] 
     221     
     222    def __init__(self, cfg=None, cfgFileSection='DEFAULT', cfgPrefix='', **kw): 
    219223        """Create store of user credentials for their current session 
    220224 
    221         @type userCert: string / M2Crypto.X509.X509 / 
     225        @type userX509Cert: string / M2Crypto.X509.X509 / 
    222226        ndg.security.common.X509.X509Cert 
    223         @param userCert: X.509 certificate for user 
     227        @param userX509Cert: X.509 certificate for user 
    224228         
    225229        @type userPriKey: string / M2Crypto.RSA.RSA  
    226230        @param userPriKey: private key for user cert 
    227231         
    228         @type issuingCert: string / ndg.security.common.X509.X509Cert 
    229         @param issuingCert: X.509 cert for issuer of user cert 
    230          
    231         @type aaURI: string 
    232         @param aaURI: URI of Attribute Authority to make requests to.  
    233         Setting this ALSO creates an AttAuthorityClient instance  
    234         self.__aaClnt.  - See aaURI property for details. 
    235          
    236         @type aaPropFilePath: string 
    237         @param aaPropFilePath: properties file path for an Attribute  
    238         Authority to make requests to.  Setting this ALSO creates an  
    239         AttAuthority instance self.__aa running locally.   - See aa property  
    240         for details.  aaURI takes precedence over this keyword i.e. if an 
    241         aaURI has been set, then calls are made to the AA web service at this 
    242         location rather to any self.__aa running locally. 
     232        @type issuingX509Cert: string / ndg.security.common.X509.X509Cert 
     233        @param issuingX509Cert: X.509 cert for issuer of user cert 
     234         
     235        @type attributeAuthorityURI: string 
     236        @param attributeAuthorityURI: URI of Attribute Authority to make  
     237        requests to.  Setting this ALSO creates an AttAuthorityClient instance  
     238        self._attributeAuthorityClnt.  - See attributeAuthorityURI property for 
     239        details. 
     240         
     241        @type attributeAuthority: ndg.security.server.AttAuthority.AttAuthority 
     242        @param attributeAuthority: Attribute Authority to make requests to.  
     243        attributeAuthorityURI takes precedence over this keyword i.e. if an 
     244        attributeAuthorityURI has been set, then calls are made to the AA web  
     245        service at this location rather to any self.attributeAuthority running  
     246        locally. 
    243247         
    244248        @type caCertFilePathList: string (for single file), list or tuple 
     
    248252        be input in call to getAttCert. 
    249253                 
    250         @type credRepos: instance of CredRepos derived class 
    251         @param credRepos: Credential Repository instance.  If not set,  
    252         defaults to NullCredRepos type - see class below... 
     254        @type credentialRepository: instance of CredentialRepository derived  
     255        class 
     256        @param credentialRepository: Credential Repository instance.  If not  
     257        set, defaults to NullCredentialRepository type - see class below... 
    253258         
    254259        @type mapFromTrustedHosts: bool 
     
    277282 
    278283        log.debug("Calling CredWallet.__init__ ...") 
    279          
    280         self.attCertRefreshElapse = attCertRefreshElapse 
    281          
    282         self.__setUserCert(userCert) 
    283         self.__setUserPriKey(userPriKey) 
    284         self.__setIssuingCert(issuingCert) 
    285          
    286         self.__setAAuri(aaURI) 
    287         self.__setCAcertFilePathList(caCertFilePathList) 
    288                  
    289         self.__credRepos = credRepos or NullCredRepos() 
    290          
    291         # Set behaviour for authorisation requests 
    292         self.__mapFromTrustedHosts = mapFromTrustedHosts 
    293         self.__rtnExtAttCertList = rtnExtAttCertList 
    294          
    295         self.wssSignatureHandlerKw = wssSignatureHandlerKw 
    296          
    297         # Get the distinguished name from the user certificate 
    298         self.__dn = self.__userCert.dn.serialise() 
    299          
    300          
    301         # Credentials are stored as a dictionary one element per attribute 
    302         # certicate held and indexed by certificate issuer name 
    303         self.__credentials = {} 
    304  
    305  
    306         # Make a connection to the Credentials Repository 
    307         if self.__credRepos: 
    308             log.info(\ 
    309             'Checking CredentialRepository for credentials for user "%s"' % \ 
    310                 self.__dn) 
    311              
    312             if not isinstance(self.__credRepos, CredRepos): 
    313                 raise CredWalletError, \ 
    314                     "Input Credentials Repository instance must be of a " + \ 
    315                     "class derived from \"CredRepos\"" 
    316      
    317         
    318             # Check for valid attribute certificates for the user 
     284 
     285        # Initialise attributes 
     286        param = {}.fromkeys(CredWallet.__slots__) 
     287        param.update(CredWallet._defParam) 
     288        for k, v in param.items(): 
    319289            try: 
    320                 self.__credRepos.auditCredentials(dn=self.__dn) 
    321                 userCred = self.__credRepos.getCredentials(self.__dn) 
    322      
    323             except Exception, e: 
    324                 raise CredWalletError, \ 
    325                 "Error updating wallet with credentials from repository: " + \ 
    326                     str(e) 
    327      
    328      
    329             # Update wallet with attribute certificates stored in the  
    330             # repository.  Store ID and certificate instantiated as an AttCert 
    331             # type 
    332             try: 
    333                 for cred in userCred: 
    334                      
    335                     attCert = AttCertParse(cred.attCert) 
    336                     issuerName = attCert['issuerName'] 
    337                      
    338                     self.__credentials[issuerName] = \ 
    339                                              {'id':cred.id, 'attCert':attCert}     
    340             except Exception, e: 
    341                 try: 
    342                     raise CredWalletError, \ 
    343                             "Error parsing Attribute Certificate ID '" + \ 
    344                                     cred.id + "' retrieved from the " + \ 
    345                                     "Credentials Repository: %s" % str(e)                 
    346                 except: 
    347                     raise CredWalletError, "Error parsing Attribute " + \ 
    348                                           "Certificate retrieved from " + \ 
    349                                           "the Credentials Repository: %s:" \ 
    350                                           % str(e) 
    351              
    352              
    353             # Filter out expired or otherwise invalid certificates 
    354             self.audit() 
    355  
    356          
    357     #_________________________________________________________________________ 
    358     def __setCert(self, cert): 
     290                setattr(self, k, v) 
     291            except AttributeError, e: 
     292                pass 
     293             
     294        # Update attributes from a config file 
     295        if cfg: 
     296            self.parseConfig(cfg, section=cfgFileSection, prefix=cfgPrefix) 
     297 
     298        # Update attributes from keywords passed 
     299        for k,v in kw: 
     300            setattr(self, k, v) 
     301#         
     302#        self.username = username 
     303#         
     304#        self.attCertRefreshElapse = attCertRefreshElapse 
     305#         
     306#        # Nb. these attribute are defined as properties 
     307#        if userCreds is not None: 
     308#            self.userX509Cert = userCreds[0] 
     309#            self.userPriKey = userCreds[1] 
     310#            self.issuingX509Cert = userCreds[2] 
     311#         
     312#        self.attributeAuthorityURI = attributeAuthorityURI 
     313#        self.caCertFilePathList = caCertFilePathList 
     314#                 
     315#        self.__credentialRepository = credentialRepository or \ 
     316#                                                    NullCredentialRepository() 
     317#         
     318#        # Set behaviour for authorisation requests 
     319#        self._mapFromTrustedHosts = mapFromTrustedHosts 
     320#        self._rtnExtAttCertList = rtnExtAttCertList 
     321#         
     322#        self.wssSignatureHandlerKw = wssSignatureHandlerKw 
     323#         
     324#        # Get the distinguished name from the user certificate 
     325#        self.__dn = self._userX509Cert.dn.serialise() 
     326#         
     327#         
     328#        # Credentials are stored as a dictionary one element per attribute 
     329#        # certicate held and indexed by certificate issuer name 
     330#        self._credentials = {} 
     331# 
     332# 
     333#        # Make a connection to the Credentials Repository 
     334#        if self.__credentialRepository: 
     335#            log.info('Checking CredentialRepository for credentials for user ' 
     336#                     '"%s"' % self.__dn) 
     337#             
     338#            if not isinstance(self.__credentialRepository,  
     339#                              CredentialRepository): 
     340#                raise CredWalletError("Input Credentials Repository instance " 
     341#                                      "must be of a class derived from " 
     342#                                      "\"CredentialRepository\"") 
     343#     
     344#        
     345#            # Check for valid attribute certificates for the user 
     346#            try: 
     347#                self.__credentialRepository.auditCredentials(dn=self.__dn) 
     348#                userCred=self.__credentialRepository.getCredentials(self.__dn) 
     349#     
     350#            except Exception, e: 
     351#                raise CredWalletError("Error updating wallet with credentials " 
     352#                                      "from repository: " + str(e)) 
     353#     
     354#     
     355#            # Update wallet with attribute certificates stored in the  
     356#            # repository.  Store ID and certificate instantiated as an AttCert 
     357#            # type 
     358#            try: 
     359#                for cred in userCred:  
     360#                    attCert = AttCertParse(cred.attCert) 
     361#                    issuerName = attCert['issuerName'] 
     362#                     
     363#                    self._credentials[issuerName] = \ 
     364#                                             {'id':cred.id, 'attCert':attCert}     
     365#            except Exception, e: 
     366#                try: 
     367#                    raise CredWalletError("Error parsing Attribute Certificate" 
     368#                                          " ID '%s' retrieved from the "  
     369#                                          "Credentials Repository: %s" %  
     370#                                          (cred.id, e))             
     371#                except: 
     372#                    raise CredWalletError("Error parsing Attribute " 
     373#                                          "Certificate retrieved from the " 
     374#                                          "Credentials Repository: %s:"%str(e)) 
     375#             
     376#            # Filter out expired or otherwise invalid certificates 
     377#            self.audit() 
     378 
     379    def parseConfig(self, cfg, prefix='', section='DEFAULT'): 
     380        '''Extract parameters from _cfg config object''' 
     381         
     382        if isinstance(cfg, basestring): 
     383            cfgFilePath = cfg 
     384            cfgObj = None 
     385        else: 
     386            cfgFilePath = None 
     387            cfgObj = cfg 
     388             
     389        # Configuration file properties are held together in a dictionary 
     390        prop = readAndValidateProperties(cfgFilePath, 
     391                                         cfg=cfgObj, 
     392                                         validKeys=CredWallet._defParam, 
     393                                         prefix=prefix, 
     394                                         sections=(section,)) 
     395         
     396        # Copy dict into object attributes 
     397        for key, val in prop: 
     398            setattr(self, key, val) 
     399 
     400         
     401    def _setX509Cert(self, cert): 
    359402        """filter and convert input cert to signing verifying cert set  
    360403        property methods.  For signingCert, set to None if it is not to be 
     
    382425         
    383426        else: 
    384             raise AttributeError, "X.509 Cert. must be type: " + \ 
    385                 "ndg.security.common.X509.X509Cert, M2Crypto.X509.X509 or " +\ 
    386                 "a base64 encoded string" 
    387  
    388  
    389     #_________________________________________________________________________ 
    390     def __setUserCert(self, userCert): 
     427            raise AttributeError("X.509 Cert. must be type: " 
     428                                 "ndg.security.common.X509.X509Cert, " 
     429                                 "M2Crypto.X509.X509 or a base64 encoded " 
     430                                 "string") 
     431 
     432    def _setUserX509Cert(self, userX509Cert): 
    391433        "Set property method for X.509 user cert." 
    392         self.__userCert = self.__setCert(userCert) 
    393          
    394  
    395     def __getUserCert(self): 
     434        self._userX509Cert = self._setX509Cert(userX509Cert) 
     435         
     436 
     437    def _getUserX509Cert(self): 
    396438        """Get user cert X509Cert instance""" 
    397         return self.__userCert 
    398  
    399     userCert = property(fget=__getUserCert, 
    400                         fset=__setUserCert, 
    401                         doc="X.509 user certificate instance") 
    402  
    403  
    404     #_________________________________________________________________________ 
    405     def __setIssuingCert(self, issuingCert): 
     439        return self._userX509Cert 
     440 
     441    userX509Cert = property(fget=_getUserX509Cert, 
     442                            fset=_setUserX509Cert, 
     443                            doc="X.509 user certificate instance") 
     444 
     445 
     446    def _setIssuingX509Cert(self, issuingX509Cert): 
    406447        "Set property method for X.509 user cert." 
    407         self.__issuingCert = self.__setCert(issuingCert) 
    408          
    409  
    410     def __getIssuingCert(self): 
     448        self._issuingX509Cert = self._setX509Cert(issuingX509Cert) 
     449         
     450 
     451    def _getIssuingX509Cert(self): 
    411452        """Get user cert X509Cert instance""" 
    412         return self.__issuingCert 
    413  
    414     issuingCert = property(fget=__getIssuingCert, 
    415                          fset=__setIssuingCert, 
    416                          doc="X.509 user certificate instance") 
     453        return self._issuingX509Cert 
     454 
     455    issuingX509Cert = property(fget=_getIssuingX509Cert, 
     456                               fset=_setIssuingX509Cert, 
     457                               doc="X.509 user certificate instance") 
    417458      
    418459  
    419     #_________________________________________________________________________ 
    420     def __setUserPriKey(self, userPriKey): 
     460    def _setUserPriKey(self, userPriKey): 
    421461        """Set method for client private key 
    422462         
     
    428468         
    429469        if isinstance(userPriKey, basestring): 
    430             self.__userPriKey = RSA.load_key_string(userPriKey, 
     470            self._userPriKey = RSA.load_key_string(userPriKey, 
    431471                                             callback=lambda *ar, **kw: None) 
    432472        elif isinstance(userPriKey, RSA.RSA): 
    433             self.__userPriKey = userPriKey           
     473            self._userPriKey = userPriKey           
    434474        else: 
    435             raise AttributeError, "user private key must be a valid " + \ 
    436                                   "M2Crypto.RSA.RSA type or a string" 
     475            raise AttributeError("user private key must be a valid " 
     476                                  "M2Crypto.RSA.RSA type or a string") 
    437477                 
    438     userPriKey = property(fset=__setUserPriKey, 
     478    userPriKey = property(fset=_setUserPriKey, 
    439479                          doc="Private key used to sign outbound message") 
    440480 
    441481    
    442     def __getCredentials(self): 
     482    def _getCredentials(self): 
    443483        """Get Property method.  Credentials are read-only 
    444484         
    445485        @rtype: dict 
    446486        @return: cached ACs indesed by issuing organisation name""" 
    447         return self.__credentials 
     487        return self._credentials 
    448488 
    449489    # Publish attribute 
    450     credentials = property(fget=__getCredentials, 
     490    credentials = property(fget=_getCredentials, 
    451491                           doc="List of Attribute Certificates")    
    452492 
    453493 
    454     #_________________________________________________________________________ 
    455     def __getCAcertFilePathList(self): 
     494    def _getCAcertFilePathList(self): 
    456495        """Get CA cert or certs used to validate AC signatures and signatures 
    457496        of peer SOAP messages. 
     
    459498        @rtype caCertFilePathList: basestring, list or tuple 
    460499        @return caCertFilePathList: file path(s) to CA certificates.""" 
    461         return self.__caCertFilePathList 
    462      
    463     #_________________________________________________________________________ 
    464     def __setCAcertFilePathList(self, caCertFilePathList): 
     500        return self._caCertFilePathList 
     501     
     502    def _setCAcertFilePathList(self, caCertFilePathList): 
    465503        """Set CA cert or certs to validate AC signatures, signatures 
    466504        of Attribute Authority SOAP responses and SSL connections where  
     
    472510         
    473511        if isinstance(caCertFilePathList, basestring): 
    474            self.__caCertFilePathList = [caCertFilePathList] 
     512           self._caCertFilePathList = [caCertFilePathList] 
    475513            
    476514        elif isinstance(caCertFilePathList, list): 
    477            self.__caCertFilePathList = caCertFilePathList 
     515           self._caCertFilePathList = caCertFilePathList 
    478516            
    479517        elif isinstance(caCertFilePathList, tuple): 
    480            self.__caCertFilePathList = list(caCertFilePathList) 
     518           self._caCertFilePathList = list(caCertFilePathList) 
    481519 
    482520        elif caCertFilePathList is not None: 
    483             raise CredWalletError, \ 
    484                         "Input CA Certificate file path is not a valid string"       
    485          
    486     caCertFilePathList = property(fget=__getCAcertFilePathList, 
    487                                   fset=__setCAcertFilePathList, 
    488                                   doc="CA Certificates - used for " + \ 
    489                                       "verification of AC and SOAP " + \ 
    490                                       "message signatures and SSL " + \ 
    491                                       "connections") 
    492  
    493  
    494     #_________________________________________________________________________ 
    495     def __createAAClnt(self, aaURI): 
     521            raise CredWalletError("Input CA Certificate file path is not a " 
     522                                  "valid string")       
     523         
     524    caCertFilePathList = property(fget=_getCAcertFilePathList, 
     525                                  fset=_setCAcertFilePathList, 
     526                                  doc="CA Certificates - used for " 
     527                                      "verification of AC and SOAP message " 
     528                                      "signatures and SSL connections") 
     529 
     530 
     531    def _createAttributeAuthorityClnt(self, attributeAuthorityURI): 
    496532        """Set up a client to an Attribute Authority with the given URI 
    497533         
    498         @type aaURI: string 
    499         @param aaURI: Attribute Authority Web Service URI. 
     534        @type attributeAuthorityURI: string 
     535        @param attributeAuthorityURI: Attribute Authority Web Service URI. 
    500536 
    501537        @rtype: ndg.security.common.AttAuthorityClient 
    502538        @return: new Attribute Authority client instance""" 
    503539 
    504         log.debug('CredWallet.__createAAClnt for service: "%s"' % aaURI) 
     540        log.debug('CredWallet._createAttributeAuthorityClnt for service: "%s"'% 
     541                  attributeAuthorityURI) 
    505542         
    506543        # Check for WS-Security settings made in self.wssSignatureHandlerKw  
     
    510547             
    511548            # Use user certificate for signing messages 
    512             if self.__issuingCert is not None: 
     549            if self._issuingX509Cert is not None: 
    513550                # Initialise WS-Security signature handling to pass  
    514                 # BinarySecurityToken containing user cert and cert for user cert  
    515                 # issuer  
     551                # BinarySecurityToken containing user cert and cert for user  
     552                # cert  issuer  
    516553                self.wssSignatureHandlerKw['reqBinSecTokValType'] = \ 
    517554                            SignatureHandler.binSecTokValType["X509PKIPathv1"] 
    518555                self.wssSignatureHandlerKw['signingCertChain'] = \ 
    519                                         (self.__issuingCert, self.__userCert) 
     556                                    (self._issuingX509Cert, self._userX509Cert) 
    520557                 
    521558            else: 
     
    525562                self.wssSignatureHandlerKw['reqBinSecTokValType'] = \ 
    526563                                    SignatureHandler.binSecTokValType["X509v3"] 
    527                 self.wssSignatureHandlerKw['signingCert'] = self.__userCert 
    528  
    529             self.wssSignatureHandlerKw['signingPriKey'] = self.__userPriKey 
     564                self.wssSignatureHandlerKw['signingCert'] = self._userX509Cert 
     565 
     566            self.wssSignatureHandlerKw['signingPriKey'] = self._userPriKey 
    530567 
    531568        if 'caCertFilePathList' not in self.wssSignatureHandlerKw: 
    532569            self.wssSignatureHandlerKw['caCertFilePathList'] = \ 
    533                                                     self.__caCertFilePathList 
    534  
    535         aaClnt = AttAuthorityClient(uri=aaURI, 
    536                             sslCACertFilePathList=self.__caCertFilePathList, 
     570                                                    self._caCertFilePathList 
     571 
     572        attributeAuthorityClnt = AttAuthorityClient(uri=attributeAuthorityURI, 
     573                            sslCACertFilePathList=self._caCertFilePathList, 
    537574                            **self.wssSignatureHandlerKw) 
    538         return aaClnt 
    539  
    540  
    541     #_________________________________________________________________________ 
    542     def __setAAuri(self, aaURI): 
     575        return attributeAuthorityClnt 
     576 
     577 
     578    def _setAttributeAuthorityURI(self, attributeAuthorityURI): 
    543579        """Set property method for Attribute Authority Web Service URI to 
    544580        connect to.  This method ALSO SETS UP THE CLIENT INTERFACE 
    545581         
    546         @type aaURI: string 
    547         @param aaURI: Attribute Authority Web Service URI.  Set to None to 
     582        @type attributeAuthorityURI: string 
     583        @param attributeAuthorityURI: Attribute Authority Web Service URI.  Set to None to 
    548584        initialise.  Set to a URI to instantiate a new AA client""" 
    549         if aaURI is None: 
    550             self.__aaClnt = None 
     585        if attributeAuthorityURI is None: 
     586            self._attributeAuthorityClnt = None 
    551587            return 
    552588        else: 
    553             self.__aaClnt = self.__createAAClnt(aaURI) 
    554              
    555     aaURI = property(fset=__setAAuri, 
     589            self._attributeAuthorityClnt = self._createAttributeAuthorityClnt( 
     590                                                        attributeAuthorityURI) 
     591             
     592    attributeAuthorityURI = property(fset=_setAttributeAuthorityURI, 
    556593             doc="AA URI - setting also sets up AttAuthorityClient instance!") 
    557594 
    558595 
    559     #_________________________________________________________________________ 
    560     def __getAAclnt(self): 
     596    def _getAttributeAuthorityClnt(self): 
    561597        """Get property method for Attribute Authority Web Service client 
    562         instance.  Use aaURI propert to set up aaClnt 
    563          
    564         @type aaClnt: AttAuthorityClient 
    565         @param aaClnt: Attribute Authority Web Service client instance""" 
    566         return self.__aaClnt 
    567              
    568     aaClnt = property(fget=__getAAclnt, doc="AA web service client instance") 
    569  
    570  
    571     #_________________________________________________________________________ 
    572     def __setAApropFilePath(self, aaPropFilePath): 
    573         """Set property method for the properties file of a local 
    574         Attribute Authority.  This method ALSO SETS UP THE LOCAL Attribute  
    575         Authority object to retrieve ACs from.  the property aaURI takes 
    576         precedence: if an aaURI is set then it assumed that an Attribute 
    577         Authority will be connected to via a web service call 
    578          
    579         @type aaPropFilePath: string 
    580         @param aaPropFilePath: Attribute Authority properties file.  Setting  
    581         this instantiates a new AA locally""" 
    582         if aaPropFilePath is None: 
    583             self.__aa = None 
    584             return 
    585  
    586         # Make a new attribute authority instance  
    587         self.__aa = AttAuthority(propFilePath=aaPropFilePath) 
    588  
    589     aaPropFilePath = property(fset=__setAApropFilePath, 
    590     doc="AA properties file path - setting this also sets up an AA locally!") 
    591  
    592  
    593     #_________________________________________________________________________ 
    594     def __getAA(self): 
     598        instance.  Use attributeAuthorityURI property to set up  
     599        attributeAuthorityClnt 
     600         
     601        @type attributeAuthorityClnt: AttAuthorityClient 
     602        @param attributeAuthorityClnt: Attribute Authority Web Service client  
     603        instance""" 
     604        return self._attributeAuthorityClnt 
     605             
     606    attributeAuthorityClnt = property(fget=_getAttributeAuthorityClnt,  
     607                      doc="Attribute Authority web service client instance") 
     608 
     609 
     610    def _getAttributeAuthority(self): 
    595611        """Get property method for Attribute Authority Web Service client 
    596         instance.  Use aaURI propert to set up aaClnt 
    597          
    598         @type aaClnt: AttAuthorityClient 
    599         @param aaClnt: Attribute Authority Web Service client instance""" 
    600         return self.__aaClnt 
    601              
    602     aa = property(fget=__getAA, doc="Attribute Authority instance") 
    603  
    604  
    605     #_________________________________________________________________________ 
     612        instance.  Use attributeAuthorityURI propert to set up  
     613        attributeAuthorityClnt 
     614         
     615        @type attributeAuthorityClnt: AttAuthorityClient 
     616        @param attributeAuthorityClnt: Attribute Authority Web Service client  
     617        instance""" 
     618        return self._attributeAuthorityClnt 
     619 
     620 
     621    def _setAttributeAuthority(self, attributeAuthority): 
     622        """Set property method for Attribute Authority Web Service instance to 
     623        connect to. 
     624         
     625        @type attributeAuthority: ndg.security.server.AttAuthority.AttAuthority 
     626        @param attributeAuthority: Attribute Authority Web Service.""" 
     627        if attributeAuthority is not None and \ 
     628           not isinstance(attributeAuthority, AttAuthority): 
     629            raise TypeError("Expecting %r type for attributeAuthority " 
     630                            "attribute" % AttAuthority) 
     631             
     632        self._attributeAuthority = self.attributeAuthority 
     633             
     634    attributeAuthority = property(fget=_getAttributeAuthority, 
     635                                  fset=_setAttributeAuthority,  
     636                                  doc="Attribute Authority instance") 
     637 
     638 
    606639    def isValid(self, **x509CertKeys): 
    607640        """Check wallet's user cert.  If expired return False 
     
    610643        @param **x509CertKeys: keywords applying to  
    611644        ndg.security.common.X509.X509Cert.isValidTime method""" 
    612         return self.__userCert.isValidTime(**x509CertKeys) 
    613  
    614      
    615     #_________________________________________________________________________ 
    616     def addCredential(self, attCert, bUpdateCredRepos=True): 
     645        return self._userX509Cert.isValidTime(**x509CertKeys) 
     646 
     647 
     648    def addCredential(self, attCert, bUpdateCredentialRepository=True): 
    617649        """Add a new attribute certificate to the list of credentials held. 
    618650 
    619651        @type attCert: 
    620652        @param attCert: new attribute Certificate to be added 
    621         @type bUpdateCredRepos: bool 
    622         @param bUpdateCredRepos: if set to True, and a repository exists it  
    623         will be updated with the new credentials also 
     653        @type bUpdateCredentialRepository: bool 
     654        @param bUpdateCredentialRepository: if set to True, and a repository  
     655        exists it will be updated with the new credentials also 
    624656         
    625657        @rtype: bool 
     
    630662        # Check input 
    631663        if not isinstance(attCert, AttCert): 
    632             raise CredWalletError,\ 
    633                 "Attribute Certificate must be an AttCert type object" 
     664            raise CredWalletError("Attribute Certificate must be an AttCert " 
     665                                  "type object") 
    634666 
    635667        # Check certificate validity 
     
    638670             
    639671        except AttCertError, e: 
    640             raise CredWalletError, "Adding Credential: %s" % e 
     672            raise CredWalletError("Adding Credential: %s" % e) 
    641673         
    642674 
     
    648680        issuerName = attCert['issuerName'] 
    649681         
    650         if issuerName in self.__credentials: 
     682        if issuerName in self._credentials: 
    651683            # There is an existing certificate held with the same issuing 
    652684            # host name as the new certificate 
    653             attCertOld = self.__credentials[issuerName]['attCert'] 
     685            attCertOld = self._credentials[issuerName]['attCert'] 
    654686 
    655687            # Get expiry times in datetime format to allow comparison 
     
    666698            # from the CredentialRepository during creation of the wallet will 
    667699            # have +ve IDs previously allocated by the database 
    668             self.__credentials[issuerName] = {'id': -1, 'attCert': attCert} 
     700            self._credentials[issuerName] = {'id': -1, 'attCert': attCert} 
    669701 
    670702            # Update the Credentials Repository - the permanent store of user 
    671703            # authorisation credentials.  This allows credentials for previous 
    672704            # sessions to be re-instated 
    673             if self.__credRepos and bUpdateCredRepos: 
    674                 self.updateCredRepos() 
     705            if self.__credentialRepository and bUpdateCredentialRepository: 
     706                self.updateCredentialRepository() 
    675707 
    676708        # Flag to caller to indicate whether the input certificate was added 
     
    680712             
    681713 
    682     #_________________________________________________________________________ 
    683714    def audit(self): 
    684715        """Check the credentials held in the wallet removing any that have 
     
    692723        # 
    693724        # P J Kershaw 12/09/05 
    694         for key, val in self.__credentials.items(): 
     725        for key, val in self._credentials.items(): 
    695726            if not val['attCert'].isValid(chkSig=False): 
    696                 del self.__credentials[key] 
    697  
    698  
    699     #_________________________________________________________________________             
    700     def updateCredRepos(self, auditCred=True): 
     727                del self._credentials[key] 
     728 
     729 
     730    def updateCredentialRepository(self, auditCred=True): 
    701731        """Copy over non-persistent credentials held by wallet into the 
    702732        perminent repository. 
     
    706736        removing invalid ones""" 
    707737 
    708         log.debug("CredWallet.updateCredRepos ...") 
    709          
    710         if not self.__credRepos: 
    711             raise CredWalletError, \ 
    712                   "No Credential Repository has been created for this wallet" 
     738        log.debug("CredWallet.updateCredentialRepository ...") 
     739         
     740        if not self.__credentialRepository: 
     741            raise CredWalletError("No Credential Repository has been created " 
     742                                  "for this wallet") 
    713743                             
    714744        # Filter out invalid certs unless auditCred flag is explicitly set to 
     
    717747 
    718748        # Update the database - only add new entries i.e. with an ID of -1 
    719         attCertList = [i['attCert'] for i in self.__credentials.values() \ 
    720                         if i['id'] == -1] 
    721  
    722         self.__credRepos.addCredentials(self.__dn, attCertList) 
    723  
    724  
    725     #_________________________________________________________________________                     
    726     def __getAttCert(self, aaClnt=None, extAttCert=None):        
     749        attCertList = [i['attCert'] for i in self._credentials.values() \ 
     750                       if i['id'] == -1] 
     751 
     752        self.__credentialRepository.addCredentials(self.__dn, attCertList) 
     753 
     754 
     755    def _getAttCert(self, attributeAuthorityClnt=None, extAttCert=None):        
    727756        """Wrapper to Attribute Authority attribute certificate request.  See 
    728757        getAttCert for the classes' public interface. 
     
    734763        and added into the wallet 
    735764 
    736         @type aaClnt: ndg.security.common.AttAuthorityClient 
    737         @param aaClnt: client object to Attribute Authority to make a request  
    738         to.  If omitted, it is set to self.__aaClnt.  This attribute may  
    739         itself be None.   In this case, a local AA client will be expected 
    740         set from a properties file. 
     765        @type attributeAuthorityClnt: ndg.security.common.AttAuthorityClient 
     766        @param attributeAuthorityClnt: client object to Attribute Authority to  
     767        make a request to.  If omitted, it is set to  
     768        self._attributeAuthorityClnt.  This attribute may itself be None.    
     769        In this case, a local AA will be expected to be set. 
    741770         
    742771        @type extAttCert: ndg.security.common.AttCert.AttCert 
     
    745774        Attribute Authority""" 
    746775       
    747         log.debug("CredWallet.__getAttCert ...") 
    748          
    749         if aaClnt is None: 
    750             aaClnt = self.__aaClnt 
    751              
    752         if aaClnt is not None: 
     776        log.debug("CredWallet._getAttCert ...") 
     777         
     778        if attributeAuthorityClnt is None: 
     779            attributeAuthorityClnt = self._attributeAuthorityClnt 
     780             
     781        if attributeAuthorityClnt is not None: 
    753782            try: 
    754783                log.debug("Calling attribute authority using supplied client") 
    755                 attCert = aaClnt.getAttCert(userAttCert=extAttCert) 
     784                attCert = attributeAuthorityClnt.getAttCert( 
     785                                                        userAttCert=extAttCert) 
    756786                                
    757                 log.info(\ 
    758              'Granted Attribute Certificate from issuer DN = "%s" at "%s"' % \ 
    759              (attCert.issuerDN, aaClnt.uri)) 
     787                log.info('Granted Attribute Certificate from issuer DN = "%s"' 
     788                         ' at "%s"' % (attCert.issuerDN,  
     789                                       attributeAuthorityClnt.uri)) 
    760790                 
    761791            except AttributeRequestDenied, e: 
    762792                raise CredWalletAttributeRequestDenied, str(e) 
    763793                             
    764         elif self.aaPropFilePath is not None: 
     794        elif self.attributeAuthority is not None: 
    765795 
    766796            # Call local based Attribute Authority with settings from the  
    767             # configuration file aaPropFilePath 
     797            # configuration file attributeAuthority 
    768798            try: 
    769799                # Request a new attribute certificate from the Attribute 
    770800                # Authority 
    771                 log.debug("Calling attribute authority using info from \ 
    772                     properties file, %s" %self.aaPropFilePath) 
    773                 attCert = self.__aa.getAttCert(userAttCert=extAttCert) 
     801                log.debug("Calling Attribute Authority using info from " 
     802                          "properties file: %s" % self.attributeAuthority) 
     803                attCert = self.attributeAuthority.getAttCert( 
     804                                                        userAttCert=extAttCert) 
    774805                 
    775                 log.info(\ 
    776                      'Granted Attribute Certificate from issuer DN = "%s"' % \ 
    777                      attCert.issuerDN) 
     806                log.info('Granted Attribute Certificate from issuer DN = "%s"'% 
     807                         attCert.issuerDN) 
    778808                 
    779809            except AttAuthorityAccessDenied, e: 
     
    781811                         
    782812            except Exception, e: 
    783                 raise CredWalletError,"Requesting attribute certificate: %s"%e 
     813                raise CredWalletError("Requesting attribute certificate: %s"%e) 
    784814 
    785815        else: 
    786             raise CredWalletError, "Error requesting attribute: " + \ 
    787                 "certificate a URI or Attribute Authority configuration " + \ 
    788                 "file must be specified" 
     816            raise CredWalletError("Error requesting attribute: certificate a " 
     817                                  "URI or Attribute Authority configuration " 
     818                                  "file must be specified") 
    789819         
    790820 
    791821        # Update attribute Certificate instance with CA's certificate ready  
    792822        # for signature check in addCredential() 
    793         if self.__caCertFilePathList is None: 
    794             raise CredWalletError, "No CA certificate has been set" 
    795          
    796         attCert.certFilePathList = self.__caCertFilePathList 
     823        if self._caCertFilePathList is None: 
     824            raise CredWalletError("No CA certificate has been set") 
     825         
     826        attCert.certFilePathList = self._caCertFilePathList 
    797827 
    798828         
     
    806836 
    807837 
    808     #_________________________________________________________________________ 
    809838    def getAATrustedHostInfo(self,  
    810839                             userRole=None, 
    811                              aaPropFilePath=None, 
    812                              aaURI=None): 
     840                             attributeAuthority=None, 
     841                             attributeAuthorityURI=None): 
    813842        """Wrapper to Attribute Authority getTrustedHostInfo 
    814843         
    815         getAATrustedHostInfo([userRole=r, ][aaPropFilePath=f|aaURI=u]) 
     844        getAATrustedHostInfo([userRole=r, ][attributeAuthority=f|attributeAuthorityURI=u]) 
    816845                    
    817846        @type userRole: string 
    818847        @param userRole: get hosts which have a mapping to this role 
    819848         
    820         @type aaURI: string 
    821         @param aaURI: to call as a web service, specify the URI for the  
     849        @type attributeAuthorityURI: string 
     850        @param attributeAuthorityURI: to call as a web service, specify the URI for the  
    822851        Attribute Authority. 
    823852         
    824         @type aaPropFilePath: string 
    825         @param aaPropFilePath: Altenrative to aaURI - to run on the local  
     853        @type attributeAuthority: string 
     854        @param attributeAuthority: Altenrative to attributeAuthorityURI - to run on the local  
    826855        machine, specify the local Attribute Authority configuration file. 
    827856        """ 
    828857         
    829         log.debug(\ 
    830         'CredWallet.getAATrustedHostInfo for role "%s" and service: "%s"' % \ 
    831                    (userRole, aaURI or aaPropFilePath)) 
    832         if aaURI: 
    833             self.__setAAuri(aaURI) 
    834         elif aaPropFilePath: 
    835             self.__setAAPropFilePath  
    836  
    837              
    838         if self.__aaClnt is not None: 
     858        log.debug('CredWallet.getAATrustedHostInfo for role "%s" and service: ' 
     859                  '"%s"' % (userRole, attributeAuthorityURI or attributeAuthority)) 
     860        if attributeAuthorityURI: 
     861            self._setAttributeAuthorityURI(attributeAuthorityURI) 
     862        elif attributeAuthority: 
     863            self._setAAPropFilePath  
     864 
     865             
     866        if self._attributeAuthorityClnt is not None: 
    839867            # Call Attribute Authority WS 
    840 #            try: 
    841                 return self.__aaClnt.getTrustedHostInfo(role=userRole)                 
    842 #                            
    843 #            except Exception, e: 
    844 #                raise CredWalletError, \ 
    845 #                            "Requesting trusted host information: %s" % str(e)                 
    846  
    847         elif self.__aa is not None: 
     868            try: 
     869                return self._attributeAuthorityClnt.getTrustedHostInfo(role=userRole)                 
     870                            
     871            except Exception, e: 
     872                log.error("Requesting trusted host information: %s" % str(e)) 
     873                raise  
     874 
     875        elif self.attributeAuthority is not None: 
    848876 
    849877            # Call local based Attribute Authority with settings from the  
    850             # configuration file aaPropFilePath 
     878            # configuration file attributeAuthority 
    851879            try: 
    852880                # Request a new attribute certificate from the Attribute 
    853881                # Authority 
    854                 return self.__aa.getTrustedHostInfo(role=userRole) 
     882                return self.attributeAuthority.getTrustedHostInfo(role=userRole) 
    855883                 
    856884            except Exception, e: 
    857                 raise CredWalletError, "Requesting trusted host info: %s" % e 
     885                log.error("Requesting trusted host info: %s" % e) 
     886                raise 
    858887 
    859888        else: 
    860             raise CredWalletError, "Error requesting trusted hosts info: " + \ 
    861                                    "a URI or Attribute Authority " + \ 
    862                                    "configuration file must be specified" 
    863  
    864  
    865     #_________________________________________________________________________ 
     889            raise CredWalletError("Error requesting trusted hosts info: "  
     890                                  "a URI or Attribute Authority "  
     891                                  "configuration file must be specified") 
     892 
     893 
    866894    def getAttCert(self, 
    867895                   reqRole=None, 
    868                    aaPropFilePath=None, 
    869                    aaURI=None, 
     896                   attributeAuthority=None, 
     897                   attributeAuthorityURI=None, 
    870898                   mapFromTrustedHosts=None, 
    871899                   rtnExtAttCertList=None, 
     
    881909        question. 
    882910 
    883         getAttCert([reqRole=r, ][aaPropFilePath=f|aaURI=u,] 
     911        getAttCert([reqRole=r, ][attributeAuthority=f|attributeAuthorityURI=u,] 
    884912                   [mapFromTrustedHosts=m, ] 
    885913                   [rtnExtAttCertList=e, ][extAttCertList=el, ] 
     
    902930        @param reqRole: the required role to get access for 
    903931         
    904         @type aaURI: string 
    905         @param aaURI: to call as a web service, specify the URI for the  
     932        @type attributeAuthorityURI: string 
     933        @param attributeAuthorityURI: to call as a web service, specify the URI for the  
    906934        Attribute Authority. 
    907935         
    908         @type aaPropFilePath: string 
    909         @param aaPropFilePath: Altenrative to aaURI - to run on the local  
     936        @type attributeAuthority: string 
     937        @param attributeAuthority: Altenrative to attributeAuthorityURI - to run on the local  
    910938        machine, specify the local Attribute Authority configuration file. 
    911939                                 
     
    922950        certificates. 
    923951         
    924         Defaults to None in which case self.__mapFromTrustedHosts is not  
     952        Defaults to None in which case self._mapFromTrustedHosts is not  
    925953        altered 
    926954 
    927955        The list is returned via CredWalletAttributeRequestDenied exception 
    928956        If no value is set, the default value held in  
    929         self.__mapFromTrustedHosts is used 
     957        self._mapFromTrustedHosts is used 
    930958 
    931959        @type rtnExtAttCertList: bool / None 
     
    937965        effectively set to True. 
    938966 
    939         If no value is set, the default value held in self.__rtnExtAttCertList 
     967        If no value is set, the default value held in self._rtnExtAttCertList 
    940968        is used. 
    941969                                 
     
    9741002         
    9751003        log.debug("CredWallet.getAttCert ...") 
    976         if aaURI: 
    977             self.__setAAuri(aaURI) 
    978         elif aaPropFilePath: 
    979             self.__setAAPropFilePath  
     1004        if attributeAuthorityURI: 
     1005            self.attributeAuthorityURI = attributeAuthorityURI 
     1006        elif attributeAuthority: 
     1007            self._setAAPropFilePath  
    9801008            
    981         if not refreshAttCert and self.__credentials: 
     1009        if not refreshAttCert and self._credentials: 
    9821010            # Refresh flag is not set so it's OK to check for any existing 
    9831011            # Attribute Certificate in the wallet whose issuerName match the  
     
    9891017             
    9901018            try: 
    991                 hostInfo = self.__aaClnt.getHostInfo() 
     1019                hostInfo = self._attributeAuthorityClnt.getHostInfo() 
    9921020                aaName = hostInfo.keys()[0] 
    9931021            except Exception, e: 
    994                 raise CredWalletError, "Getting host info: %s" % e 
     1022                raise CredWalletError("Getting host info: %s" % e) 
    9951023             
    9961024            # Look in the wallet for an AC with the same issuer name 
    997             if aaName in self.__credentials: 
     1025            if aaName in self._credentials: 
    9981026                # Existing Attribute Certificate found in wallet - Check that  
    9991027                # it will be valid for at least the next 2 hours 
     
    10041032                        timedelta(seconds=self.attCertRefreshElapse) 
    10051033                 
    1006                 attCert = self.__credentials[aaName]['attCert'] 
     1034                attCert = self._credentials[aaName]['attCert'] 
    10071035                if attCert.isValidTime(dtNow=dtNow): 
    1008                     log.info("Retrieved an existing %s AC from the wallet" % \ 
     1036                    log.info("Retrieved an existing %s AC from the wallet" %  
    10091037                             aaName) 
    10101038                    return attCert 
     
    10141042        # made 
    10151043        if mapFromTrustedHosts is not None: 
    1016             self.__mapFromTrustedHosts = mapFromTrustedHosts 
     1044            self._mapFromTrustedHosts = mapFromTrustedHosts 
    10171045 
    10181046        if rtnExtAttCertList is not None: 
    1019             self.__rtnExtAttCertList = rtnExtAttCertList 
     1047            self._rtnExtAttCertList = rtnExtAttCertList 
    10201048 
    10211049 
     
    10231051        # centres) 
    10241052        if extTrustedHostList: 
    1025             log.info(\ 
    1026         "Checking for ACs in wallet matching list of trusted hosts set: %s" %  
    1027                  extTrustedHostList) 
    1028              
    1029             if not self.__mapFromTrustedHosts: 
    1030                 raise CredWalletError, "A list of trusted hosts has been " + \ 
    1031                 "input but mapping from trusted hosts is set to disallowed" 
     1053            log.info("Checking for ACs in wallet matching list of trusted " 
     1054                     "hosts set: %s" % extTrustedHostList) 
     1055             
     1056            if not self._mapFromTrustedHosts: 
     1057                raise CredWalletError("A list of trusted hosts has been "  
     1058                                      "input but mapping from trusted hosts " 
     1059                                      "is set to disallowed") 
    10321060             
    10331061            if isinstance(extTrustedHostList, basestring): 
     
    10361064            # Nb. Any extAttCertList is overriden by extTrustedHostList being 
    10371065            # set 
    1038             extAttCertList = [self.__credentials[hostName]['attCert'] \ 
     1066            extAttCertList = [self._credentials[hostName]['attCert'] \ 
    10391067                              for hostName in extTrustedHostList \ 
    1040                               if hostName in self.__credentials] 
     1068                              if hostName in self._credentials] 
    10411069 
    10421070        # Set an empty list to trigger an AttributeError by initialising it to 
     
    10541082 
    10551083            except AttributeError: 
    1056                 log.debug(\ 
    1057   "No external Attribute Certificates - trying request without mapping...") 
     1084                log.debug("No external Attribute Certificates - trying " 
     1085                          "request without mapping...") 
    10581086                # No List set - attempt request without 
    10591087                # using mapping from trusted hosts 
     
    10651093                # give up 
    10661094                errMsg = "Attempting to obtained a mapped certificate: " + \ 
    1067                     "no external attribute certificates are available" 
     1095                         "no external attribute certificates are available" 
    10681096                     
    10691097                # Add the exception form the last call to the Attribute 
     
    10791107            # Request Attribute Certificate from Attribute Authority 
    10801108            try: 
    1081                 attCert = self.__getAttCert(extAttCert=extAttCert)                 
     1109                attCert = self._getAttCert(extAttCert=extAttCert)                 
    10821110                # Access granted 
    10831111                return attCert 
     
    10931121                    # is present continue cycling through this until one of 
    10941122                    # them is accepted and a mapped certificate can be derived 
    1095                     log.debug(\ 
    1096 "AC request denied - but external ACs available to try mapped AC request ...") 
     1123                    log.debug("AC request denied - but external ACs available " 
     1124                              "to try mapped AC request ...") 
    10971125                    continue 
    10981126                              
     
    11001128                # to identify attribute certificates from other hosts which 
    11011129                # could be used to make a mapped certificate 
    1102                 log.debug(\ 
    1103                     "Getting a list of trusted hosts for mapped AC request ...") 
     1130                log.debug("Getting a list of trusted hosts for mapped AC " 
     1131                          "request ...") 
    11041132                try: 
    11051133                    trustedHostInfo = self.getAATrustedHostInfo(reqRole, 
    1106                                             aaPropFilePath=aaPropFilePath) 
     1134                                            attributeAuthority=attributeAuthority) 
    11071135                except NoMatchingRoleInTrustedHosts, e: 
    1108                     raise CredWalletAttributeRequestDenied, \ 
    1109                         'Can\'t get a mapped Attribute Certificate for ' + \ 
    1110                         'the "%s" role' % reqRole 
     1136                    raise CredWalletAttributeRequestDenied( 
     1137                        'Can\'t get a mapped Attribute Certificate for ' 
     1138                        'the "%s" role' % reqRole) 
    11111139                 
    11121140                except Exception, e: 
     
    11141142 
    11151143                if not trustedHostInfo: 
    1116                     raise CredWalletAttributeRequestDenied, \ 
    1117                         "Attribute Authority has no trusted hosts with " + \ 
    1118                         "which to make a mapping" 
     1144                    raise CredWalletAttributeRequestDenied( 
     1145                        "Attribute Authority has no trusted hosts with " 
     1146                        "which to make a mapping") 
    11191147 
    11201148                 
     
    11261154                # Look for Attribute Certificates with matching issuer host 
    11271155                # names 
    1128                 log.debug(\ 
    1129             "Checking wallet for ACs issued by one of the trusted hosts...") 
    1130                 for hostName in self.__credentials: 
     1156                log.debug("Checking wallet for ACs issued by one of the " 
     1157                          "trusted hosts...") 
     1158                for hostName in self._credentials: 
    11311159 
    11321160                    # Nb. Candidate certificates for mappings must have 
    11331161                    # original provenance and contain at least one of the 
    11341162                    # required roles 
    1135                     attCert = self.__credentials[hostName]['attCert'] 
     1163                    attCert = self._credentials[hostName]['attCert'] 
    11361164                     
    11371165                    if hostName in trustedHostInfo and attCert.isOriginal():                         
     
    11541182                        try: 
    11551183                            # Try request to trusted host 
    1156                             trustedAAClnt = self.__createAAClnt(info['aaURI']) 
    1157                             extAttCert=self.__getAttCert(aaClnt=trustedAAClnt) 
     1184                            trustedAAClnt = self._createAttributeAuthorityClnt(info['attributeAuthorityURI']) 
     1185                            extAttCert=self._getAttCert(attributeAuthorityClnt=trustedAAClnt) 
    11581186 
    11591187                            # Check the certificate contains at least one of 
     
    11711199                            # ignore any errors and continue 
    11721200                            log.warning('AC request to trusted host "%s"' % \ 
    1173                                         info['aaURI'] + ' resulted in: %s'%e) 
     1201                                        info['attributeAuthorityURI'] + ' resulted in: %s'%e) 
    11741202                             
    11751203                     
     
    11921220                                            extAttCertList=extAttCertList, 
    11931221                                            trustedHostInfo=trustedHostInfo)             
    1194          
    1195 #_____________________________________________________________________________ 
    1196 class CredReposError(_CredWalletException):    
     1222 
     1223 
     1224class CredentialRepositoryError(_CredWalletException):    
    11971225    """Exception handling for NDG Credential Repository class.""" 
    11981226 
    11991227 
    1200 #_____________________________________________________________________________ 
    1201 class CredRepos: 
    1202     """CredWallet's interface class to a Credential Repository""" 
    1203      
    1204  
     1228class CredentialRepository: 
     1229    """CredWallet's abstract interface class to a Credential Repository.  The 
     1230    Credential Repository is abstract store of user currently valid user 
     1231    credentials.  It enables retrieval of attribute certificates from a user's 
     1232    previous session(s)""" 
     1233         
    12051234    def __init__(self, propFilePath=None, dbPPhrase=None, **prop): 
    1206         """Initialise Credential Repository abstract base class derive from  
     1235        """Initialise Credential Repository abstract base class.  Derive from  
    12071236        this class to define Credentail Repository interface Credential 
    12081237        Wallet  
     
    12221251        @param **prop: any other keywords required 
    12231252        """ 
    1224         raise NotImplementedError, \ 
    1225             self.__init__.__doc__.replace('\n       ','') 
     1253        raise NotImplementedError( 
     1254            self.__init__.__doc__.replace('\n       ','')) 
    12261255 
    12271256 
     
    12331262        @type dn: string 
    12341263        @param dn: users Distinguished Name""" 
    1235         raise NotImplementedError, \ 
    1236             self.addUser.__doc__.replace('\n       ','') 
     1264        raise NotImplementedError( 
     1265            self.addUser.__doc__.replace('\n       ','')) 
    12371266 
    12381267                             
     
    12451274        Attribute Certificate e.g. check validity time, XML signature, version 
    12461275         etc.  Default is check validity time only - See AttCert class""" 
    1247         raise NotImplementedError, \ 
    1248             self.auditCredentials.__doc__.replace('\n       ','') 
     1276        raise NotImplementedError( 
     1277            self.auditCredentials.__doc__.replace('\n       ','')) 
    12491278 
    12501279 
     
    12561285        @rtype: list  
    12571286        @return: list of Attribute Certificates""" 
    1258         raise NotImplementedError, \ 
    1259             self.getCredentials.__doc__.replace('\n       ','') 
     1287        raise NotImplementedError( 
     1288            self.getCredentials.__doc__.replace('\n       ','')) 
    12601289 
    12611290         
     
    12681297        @type attCertList: list 
    12691298        @param attCertList: list of attribute certificates""" 
    1270         raise NotImplementedError, \ 
    1271             self.addCredentials.__doc__.replace('\n       ','') 
    1272  
    1273  
    1274  
    1275 #_____________________________________________________________________________ 
    1276 class NullCredRepos(CredRepos): 
     1299        raise NotImplementedError( 
     1300            self.addCredentials.__doc__.replace('\n       ','')) 
     1301 
     1302 
     1303 
     1304class NullCredentialRepository(CredentialRepository): 
    12771305    """Implementation of Credential Repository interface with empty stubs.   
    1278     This allows for where no Credential Repository is required""" 
     1306    Use this class in the case where no Credential Repository is required""" 
    12791307     
    12801308    def __init__(self, propFilePath=None, dbPPhrase=None, **prop): 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/SQLObject.py

    r2909 r4279  
    2525    import cElementTree as ElementTree 
    2626 
    27 from CredWallet import CredRepos as CredReposBase 
    28 from CredWallet import CredReposError 
     27from CredWallet import CredentialRepository as CredentialRepositoryBase 
     28from CredWallet import CredentialRepositoryError 
    2929 
    3030 
    3131#_____________________________________________________________________________ 
    32 class CredRepos(CredReposBase): 
     32class CredentialRepository(CredentialRepositoryBase): 
    3333    """Interface to Credential Repository Database 
    3434     
    35     Nb. inherits from CredWallet.CredRepos to ensure correct interface 
     35    Nb. inherits from CredWallet.CredentialRepository to ensure correct interface 
    3636    to the wallet""" 
    3737 
     
    108108                     
    109109                    if dbPPhrase is None: 
    110                         raise CredReposError, "No database pass-phrase set" 
     110                        raise CredentialRepositoryError, "No database pass-phrase set" 
    111111                     
    112112                    dbURI = dbURIspl[0] + dbPPhrase + dbURIspl[2] 
     
    118118        except Exception, e: 
    119119            # Checking form missing keywords 
    120             raise CredReposError, "Error creating database URI: %s" % e 
     120            raise CredentialRepositoryError, "Error creating database URI: %s" % e 
    121121 
    122122        try: 
    123123            self.__con = connectionForURI(dbURI) 
    124124        except Exception, e: 
    125             raise CredReposError, "Error creating database connection: %s" % e 
     125            raise CredentialRepositoryError, "Error creating database connection: %s" % e 
    126126 
    127127        if chkConnection: 
     
    130130                 
    131131            except Exception, e: 
    132                 raise CredReposError, \ 
     132                raise CredentialRepositoryError, \ 
    133133                        "Error connecting to Credential Repository: %s" % e 
    134134 
    135135             
    136136        # Copy the connection object into the table classes 
    137         CredRepos.UserID._connection = self.__con 
    138         CredRepos.UserCredential._connection = self.__con 
     137        CredentialRepository.UserID._connection = self.__con 
     138        CredentialRepository.UserCredential._connection = self.__con 
    139139           
    140140 
     
    146146        for key in prop.keys(): 
    147147            if key not in self.__validKeys: 
    148                 raise CredReposError, "Property name \"%s\" is invalid" % key 
     148                raise CredentialRepositoryError, "Property name \"%s\" is invalid" % key 
    149149                 
    150150        self.__prop.update(prop) 
     
    175175                 
    176176            except IOError, e: 
    177                 raise CredReposError, \ 
     177                raise CredentialRepositoryError, \ 
    178178                                "Error parsing properties file \"%s\": %s" % \ 
    179179                                (e.filename, e.strerror) 
    180180 
    181181            except Exception, e: 
    182                 raise CredReposError, \ 
     182                raise CredentialRepositoryError, \ 
    183183                                "Error parsing properties file \"%s\": %s" % \ 
    184184                                (propFilePath, str(e)) 
    185185 
    186186        if propElem is None: 
    187             raise CredReposError, \ 
     187            raise CredentialRepositoryError, \ 
    188188    "Error parsing properties file \"%s\": root element is not defined" % \ 
    189189                                propFilePath 
     
    211211 
    212212        except Exception, e: 
    213             raise CredReposError, "Error adding new user '%s': %s" % \ 
     213            raise CredentialRepositoryError, "Error adding new user '%s': %s" % \ 
    214214                                                                (userName, e) 
    215215 
     
    243243             
    244244        except Exception, e: 
    245             raise CredReposError,"Selecting credentials from repository: " + \ 
     245            raise CredentialRepositoryError,"Selecting credentials from repository: " + \ 
    246246                                 str(e) 
    247247 
     
    257257        except Exception, e: 
    258258            try: 
    259                 raise CredReposError, "Deleting credentials for '%s': %s" % \ 
     259                raise CredentialRepositoryError, "Deleting credentials for '%s': %s" % \ 
    260260                                                       (cred.dn, e) 
    261261            except: 
    262                 raise CredReposError, "Deleting credentials: %s" % e 
     262                raise CredentialRepositoryError, "Deleting credentials: %s" % e 
    263263 
    264264 
     
    271271             
    272272        except Exception, e: 
    273             raise CredReposError, "Selecting credentials for %s: %s" % (dn, e) 
     273            raise CredentialRepositoryError, "Selecting credentials for %s: %s" % (dn, e) 
    274274 
    275275 
     
    296296 
    297297        except Exception, e: 
    298             raise CredReposError, "Checking for user \"%s\": %s" % (dn, e) 
     298            raise CredentialRepositoryError, "Checking for user \"%s\": %s" % (dn, e) 
    299299 
    300300         
     
    312312 
    313313        except Exception, e: 
    314             raise CredReposError, "Adding new user credentials for " + \ 
     314            raise CredentialRepositoryError, "Adding new user credentials for " + \ 
    315315                                  "user %s: %s" % (dn, str(e)) 
    316316 
     
    336336    #_________________________________________________________________________ 
    337337    # Database tables defined using SQLObject derived classes 
    338     # Nb. These are class variables of the CredRepos class 
     338    # Nb. These are class variables of the CredentialRepository class 
    339339    class UserID(SQLObject): 
    340340        """SQLObject derived class to define Credentials Repository db table 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/utils/ConfigFileParsers.py

    r4245 r4279  
    3939        return optionstr 
    4040 
     41class ConfigFileParseError(Exception): 
     42    """Raise for errors in configuration file formatting""" 
     43     
    4144def readAndValidateProperties(propFilePath, validKeys={}, **iniPropertyFileKw): 
    4245    """ 
     
    106109         
    107110 
    108 def readINIPropertyFile(propFilePath, validKeys, sections=None, 
     111def readINIPropertyFile(propFilePath, validKeys, cfg=None, sections=None, 
    109112                        wsseSection='WS-Security', prefix=''): 
    110113    """ 
     
    134137    log.debug("File is not marked as XML - treating as flat 'ini' format file") 
    135138     
    136     if not os.path.isfile(propFilePath): 
    137         raise ValueError('Error parsing properties file "%s": No such file' % \ 
    138                          propFilePath) 
    139  
    140     cfg = CaseSensitiveConfigParser() 
    141     cfg.read(propFilePath) 
     139 
     140    if cfg is None: 
     141        cfg = CaseSensitiveConfigParser() 
     142        cfg.read(propFilePath) 
     143        if not os.path.isfile(propFilePath): 
     144            raise ValueError('Error parsing properties file "%s": No such ' 
     145                             'file' % propFilePath) 
     146        
    142147    properties = {} 
    143148     
     
    199204            continue 
    200205         
    201         # Allow for prefixes 
     206        # Allow for prefixes - 1st a prefix used for all these parameters 
    202207        if prefix and key.startswith(prefixDot): 
    203208            key = key.replace(prefixDot, '') 
    204209             
    205         if val: 
    206             # expand out any env vars 
    207             val = expandEnvVars(val) 
    208              
    209             # if the tag contains an integer, convert this appropriately 
    210             if val.isdigit(): 
    211                 val = int(val) 
    212              
    213             # ensure it is read in as the correct type 
    214             if key in validKeys and isinstance(validKeys[key], list): 
    215                 # Treat as a list of space separated elements 
    216                 val = val.split() 
    217         else: 
    218             # NB, the XML parser will return empty vals as None, so ensure  
    219             # consistency here 
    220             val = None 
    221      
    222         # check if key already exists; if so, append to list 
    223         if properties.has_key(key): 
    224             properties[key] = __listify(properties[key]).extend(val) 
    225         else: 
    226             properties[key] = val 
     210        # 2nd - prefixes to denote sections 
     211        splitKey = key.split('.') 
     212        if len(splitKey) > 1: 
     213            # Nb. This allows only one level of nesting 
     214            sectionKey = splitKey[0] 
     215            subKey = ''.join(splitKey[1:]) 
     216            if sectionKey in validKeys: 
     217                val = _parseVal(subKey, val, validKeys[sectionKey]) 
     218                if sectionKey in properties: 
     219                    properties[sectionKey][subKey] = val 
     220                else: 
     221                    properties[sectionKey] = {subKey: val} 
     222        else:  
     223            # No sub-section present    
     224            val = _parseVal(key, val, validKeys) 
     225         
     226            # check if key already exists; if so, append to list 
     227            if properties.has_key(key): 
     228                properties[key] = __listify(properties[key]).extend(val) 
     229            else: 
     230                properties[key] = val 
    227231 
    228232    log.debug("Finished parsing section") 
    229233    return properties 
     234 
     235 
     236def _parseVal(key, val, validKeys):  
     237               
     238    if val: 
     239        # expand out any env vars 
     240        val = expandEnvVars(val) 
     241         
     242        # if the tag contains an integer, convert this appropriately 
     243        if val.isdigit(): 
     244            val = int(val) 
     245         
     246        # ensure it is read in as the correct type 
     247        if key in validKeys and isinstance(validKeys[key], list): 
     248            # Treat as a list of space separated elements 
     249            val = val.split() 
     250    else: 
     251        # NB, the XML parser will return empty vals as None, so ensure  
     252        # consistency here 
     253        val = None 
     254         
     255    return val 
    230256 
    231257removePrefix = lambda prop: dict([(k.replace(prefix, ''), v)  
     
    313339    ''' 
    314340    Checks if val is a list; if so return as is, if not return as list 
     341     
     342    @type val: list 
    315343    @param val: object to turn into a list 
     344    @rtype: list 
    316345    @return: val as a list (if it is not already) 
    317346    ''' 
     
    340369            validateProperties(properties[key], WSSecurityConfig.defParam) 
    341370             
     371        elif isinstance(validKeys[key], dict): 
     372            validateProperties(properties[key], validKeys[key]) 
     373                 
    342374        elif key not in properties and nonDefaultProperty(validKeys[key]): 
    343375            invalidKeys += [key] 
     
    390422 
    391423     
    392 def _setDefaultValues(properties, validKeys): 
     424def _setDefaultValues(properties, validKeys, sectionKey=''): 
    393425    ''' 
    394426    Check the contents of the properties dict to ensure it contains all the 
     
    403435    @return properties: updated dict with default values for any missing values 
    404436    ''' 
    405     log.debug("Checking for any unset keys") 
     437     
     438     
     439    if sectionKey: 
     440        sectionKeyDot = sectionKey+'.' 
     441        log.debug("Checking for any unset keys for %s sub-section"%sectionKey) 
     442    else: 
     443        sectionKeyDot = '' 
     444        log.debug("Checking for any unset keys") 
     445         
    406446    for key in validKeys: 
    407447        if key not in properties or not properties[key]: 
    408             if validKeys[key] == NotImplementedError: 
     448            if validKeys[key] == NotImplemented: 
    409449                errorMessage = 'Missing property "%s" must be set.' % key 
    410450                log.error(errorMessage) 
     
    412452             
    413453            log.warning("Found missing/unset property - setting default " 
    414                         "values: %s=%s" % (key, validKeys[key])) 
     454                        "values: %s%s=%s" % (sectionKeyDot,key,validKeys[key])) 
    415455            properties[key] = validKeys[key] 
     456             
     457        elif isinstance(properties[key], dict): 
     458            _setDefaultValues(properties[key], validKeys[key], sectionKey=key) 
     459         
    416460    log.debug("Finished checking for unset keys") 
    417461 
  • TI12-security/trunk/python/ndg.security.common/setup.py

    r4143 r4279  
    3939# Credential Repository.  MySQL package may need to be in its own option 
    4040# eventually 
    41 credReposDbSupport = False 
    42 if credReposDbSupport: 
     41credentialRepositoryDbSupport = False 
     42if credentialRepositoryDbSupport: 
    4343    _pkgDependencies += [ 
    4444    'SQLObject', 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/SessionMgr/__init__.py

    r4265 r4279  
    1212__contact__ = "P.J.Kershaw@rl.ac.uk" 
    1313__revision__ = '$Id$' 
     14import logging 
     15log = logging.getLogger(__name__) 
    1416 
    1517# Modify sys.path when carrying out dynamic import for Credential Repository 
    1618import sys, os 
     19 
     20# Base 64 encode session IDs if returned in strings - urandom's output may 
     21# not be suitable for printing! 
     22import base64 
    1723 
    1824# Time module for use with cookie expiry 
     
    2733    import cElementTree as ElementTree 
    2834 
    29 # Base 64 encode session IDs if returned in strings - urandom's output may 
    30 # not be suitable for printing! 
    31 import base64 
    32  
    3335# Session Manager URI in cookie 
    3436from Crypto.Cipher import AES 
    3537 
    36 # Check Session Manager URI is encrypted 
    37 from urllib import urlopen 
    38  
    3938# Credential Wallet 
    40 from ndg.security.common.CredWallet import CredWallet, CredRepos, \ 
     39from ndg.security.common.CredWallet import CredWallet, CredentialRepository, \ 
    4140    CredWalletError, CredWalletAttributeRequestDenied 
    4241 
     
    4948 
    5049# generic parser to read INI/XML properties file 
    51 from ndg.security.common.utils.ConfigFileParsers import readAndValidateProperties 
     50from ndg.security.common.utils.ConfigFileParsers import \ 
     51                                                    readAndValidateProperties 
    5252 
    5353# utility to instantiate classes dynamically 
    5454from ndg.security.common.utils.ClassFactory import instantiateClass 
    55 # Use in SessionMgr __redirectAttCertReq to retrieve and store Public  
    56 # key 
    57 import tempfile 
    58 import urllib 
    59 import logging 
    60 log = logging.getLogger(__name__) 
    61  
    62 #_____________________________________________________________________________ 
     55 
     56 
    6357class _SessionException(Exception): 
    6458    """Base class for all Exceptions in this module.  Overrides Exception to  
     
    6862        Exception.__init__(self, msg) 
    6963 
    70 #_____________________________________________________________________________ 
    7164class UserSessionError(_SessionException):     
    7265    """Exception handling for NDG User Session class.""" 
    7366 
    74 #_____________________________________________________________________________ 
    7567class InvalidUserSession(UserSessionError):     
    7668    """Problem with a session's validity""" 
    7769 
    78 #_____________________________________________________________________________ 
    7970class UserSessionExpired(UserSessionError):     
    8071    """Raise when session's X.509 cert. has expired""" 
    8172 
    82 #_____________________________________________________________________________ 
    8373class UserSessionX509CertNotBeforeTimeError(UserSessionError):     
    8474    """Raise when session's X.509 cert. not before time is before the current 
     
    140130 
    141131    @staticmethod 
    142     def encodeSessionMgrURI(txt, encrKey=None): 
     132    def encodeTxt(txt, encrKey=None): 
    143133        """Encode Session Manager URI to allow inclusion in a web browser  
    144134        session cookie 
     
    168158             
    169159            except Exception, e: 
    170                 raise UserSessionError("Encrypting Session Manager URI: %s"%e) 
     160                raise UserSessionError("Encrypting text: %s" % e) 
    171161 
    172162        try: 
     
    174164         
    175165        except Exception, e: 
    176             raise UserSessionError("Encoding Session Manager URI: %s"%e) 
     166            raise UserSessionError("Encoding Session Manager URI: %s" % e) 
    177167         
    178168    @staticmethod                                    
    179     def decodeSessionMgrURI(txt, encrKey=None): 
     169    def decodeTxt(txt, encrKey=None): 
    180170        """Decode the URI from cookie set by another Session Manager.  This 
    181171        is required when reading a session cookie to find out which  
     
    199189             
    200190        except Exception, e: 
    201             raise SessionMgrError("Decoding Session Manager URI: %s" % e)           
     191            raise SessionMgrError("Decoding text: %s" % e)           
    202192        if encrKey is not None: 
    203193            try: 
     
    208198             
    209199            except Exception, e: 
    210                 raise SessionMgrError("Decrypting Session Manager URI: %s"%e)            
     200                raise SessionMgrError("Decrypting Session Manager URI: %s" % e)            
    211201        else: 
    212202            return b64DecodedEncrTxt 
     
    216206 
    217207class SessionNotFound(SessionMgrError): 
    218     """Raise from SessionMgr.__connect2UserSession when session ID is not  
     208    """Raise from SessionMgr._connect2UserSession when session ID is not  
    219209    found in the Session dictionary""" 
    220210     
     
    241231    @cvar _propFileName: default file name for properties file under  
    242232    _confDir 
    243     """ 
     233     
     234    @type _credentialRepositoryValidElem: dict 
     235    @cvar _credentialRepositoryValidElem: permitted properties file elements  
     236    for configuring the Crendential Repository.  Those set to NotImplemented  
     237    indicate properties that must be set.  For the others, the value indicates 
     238    the default if not present in the file""" 
    244239 
    245240    # valid configuration property keywords 
    246     WS_SETTINGS_KEY = 'WS-Security' 
    247     AUTHN_KEY_NAME = 'authNServiceProp' 
    248     CRED_REPOS_KEY_NAME = 'credReposProp' 
     241    WS_SETTINGS_KEY_NAME = 'WS-Security' 
     242    AUTHN_KEY_NAME = 'authNService' 
     243    CRED_REPOS_KEY_NAME = 'credentialRepository' 
     244    CRED_WALLET_KEY_NAME = 'credentialWallet' 
     245     
     246    _credentialRepositoryValidElem = { 
     247        'modFilePath': None, 
     248        'modName': None, 
     249        'className': None, 
     250        'propFile': None 
     251    } 
    249252 
    250253    _validElem = { 
    251254        'portNum':                None, 
    252         'useSSL':                 None, 
     255        'useSSL':                 False, 
    253256        'sslCertFile':            None, 
    254257        'sslKeyFile':             None, 
    255258        'sslCACertDir':           None, 
    256         'sessMgrEncrKey':         None,  
    257         'sessMgrURI':             None, 
    258         'cookieDomain':           None,  
    259         'authNServiceProp':       None,  
    260         CRED_REPOS_KEY_NAME:      ('modFilePath', 'modName', 'className',  
    261                                    'propFile'), 
     259        AUTHN_KEY_NAME:           None,  
     260        CRED_WALLET_KEY_NAME:     None, 
     261        CRED_REPOS_KEY_NAME:      _credentialRepositoryValidElem, 
    262262    } 
    263263 
     
    269269                 propFileSection='DEFAULT', 
    270270                 propPrefix='', 
    271                  credReposPPhrase=None, **prop):        
     271                 credentialRepositoryPPhrase=None, **prop):        
    272272        """Create a new session manager to manager NDG User Sessions 
    273273         
    274274        propFilePath:        path to properties file 
    275         credReposPPhrase:    for credential repository if not set in 
     275        credentialRepositoryPPhrase:    for credential repository if not set in 
    276276                             properties file 
    277277        **prop:              set any other properties corresponding to the 
     
    289289        self.__dnDict = {} 
    290290 
     291        # Finally, also key by username 
     292        self.__usernameDict = {} 
     293         
    291294        # Credential Repository interface only set if properties file is set 
    292         # otherwise explict calls are necessary to set credReposProp via 
    293         # setProperties/readProperties and then loadCredReposInterface 
    294         self.__credRepos = None 
     295        # otherwise explicit calls are necessary to set credentialRepositoryProp via 
     296        # setProperties/readProperties and then loadCredentialRepositoryInterface 
     297        self._credentialRepository = None 
    295298     
    296299        # Set from input or use defaults based or environment variables 
    297300        self.propFilePath = propFilePath 
     301         
     302        self.propFileSection = propFileSection 
     303        self.propPrefix = propPrefix 
    298304         
    299305        # Set properties from file 
     
    309315        # Call here as we can safely expect that all Credential Repository 
    310316        # parameters have been set above 
    311         self.__credRepos = instantiateClass( 
    312                 self.__prop[self.CRED_REPOS_KEY_NAME].get('modName'), 
    313                 self.__prop[self.CRED_REPOS_KEY_NAME].get('className'), 
    314                 moduleFilePath=self.__prop[self.CRED_REPOS_KEY_NAME].get('modFilePath'), 
    315                 objectType=CredRepos, 
    316                 classProperties=self.__prop[self.CRED_REPOS_KEY_NAME]) 
     317        credentialRepositoryModule = self.__prop[self.CRED_REPOS_KEY_NAME].get('modName') 
     318        credentialRepositoryClassName = self.__prop[self.CRED_REPOS_KEY_NAME].get('className') 
     319        if credentialRepositoryModule is None or credentialRepositoryClassName is None: 
     320            self._credentialRepository = NullCredentialRepository() 
     321        else: 
     322            credentialRepositoryModuleFilePath = \ 
     323                self.__prop[self.CRED_REPOS_KEY_NAME].get('modFilePath') 
     324                 
     325            self._credentialRepository = instantiateClass( 
     326                        credentialRepositoryModule, 
     327                        credentialRepositoryClassName, 
     328                        moduleFilePath=credentialRepositoryModuleFilePath, 
     329                        objectType=CredentialRepository, 
     330                        classProperties=self.__prop[self.CRED_REPOS_KEY_NAME]) 
    317331         
    318332        # Set any properties that were provided by keyword input 
     
    321335        self.setProperties(**prop) 
    322336         
    323     def __repr__(self): 
    324         """Return file properties dictionary as representation""" 
    325         return repr(self.__prop) 
     337#    def __repr__(self): 
     338#        """Return file properties dictionary as representation""" 
     339#        return repr(self.__prop) 
    326340 
    327341    def __delitem__(self, key): 
     
    395409                                 "string.") 
    396410       
    397         self._propFilePath = val 
    398         log.debug("Path set to: %s" %val) 
     411        self._propFilePath = os.path.expandvars(val) 
     412        log.debug("Path set to: %s" % val) 
    399413         
    400414    def getPropFilePath(self): 
     
    524538        # Configuration file properties are held together in a dictionary 
    525539        self.__prop = readAndValidateProperties(self.propFilePath, 
    526                                             validKeys=SessionMgr._validElem) 
     540                                            validKeys=SessionMgr._validElem, 
     541                                            prefix=prefix, 
     542                                            sections=(section,), 
     543                                            wsseSection=self.WS_SETTINGS_KEY_NAME) 
    527544         
    528545        # add the WS-security properties to the main properties 
    529         if self.__prop.has_key(self.WS_SETTINGS_KEY): 
    530             self.__prop.update(self.__prop[self.WS_SETTINGS_KEY]) 
     546        if self.__prop.has_key(self.WS_SETTINGS_KEY_NAME): 
     547            self.__prop.update(self.__prop[self.WS_SETTINGS_KEY_NAME]) 
    531548 
    532549        missingElem = [] 
     
    674691            # Connect to an existing session identified by a session ID and  
    675692            # return equivalent proxy cert 
    676             userSess = self.__connect2UserSession(sessID=sessID) 
     693            userSess = self._connect2UserSession(sessID=sessID) 
    677694            userCert = userSess.credWallet.userCert 
    678695             
     
    680697            # Connect to an existing session identified by a proxy  
    681698            # certificate  
    682             userSess = self.__connect2UserSession(userCert=userCert) 
     699            userSess = self._connect2UserSession(userCert=userCert) 
    683700            sessID = userSess.latestSessID 
    684701             
     
    698715                 
    699716            except Exception, e: 
    700                 raise SessionMgrError("Delegating from MyProxy: %s" % e) 
     717                raise SessionMgrError("Authentication Service: %s" % e) 
    701718 
    702719            if createServerSess: 
    703720                # Session Manager creates and manages user's session 
    704                 userSess = self.__createUserSession(userCert,  
    705                                                     userPriKey,  
    706                                                     issuingCert) 
     721                userSess = self._createUserSession(username, userCreds) 
    707722                sessID = userSess.latestSessID 
    708723            else: 
     
    713728         
    714729        
    715     def __createUserSession(self, *creds): 
     730    def _createUserSession(self, username, creds=None): 
    716731        """Create a new user session from input user credentials        
    717732        and return 
    718733         
     734        @type username: basestring 
     735        @param username: username user logged in with 
    719736        @type creds: tuple 
    720737        @param creds: tuple containing user certificate, private key 
    721738        and optionally an issuing certificate.  An issuing certificate is 
    722739        present if user certificate is a proxy and therefore it's issuer is 
    723         other than the CA.""" 
    724          
    725         log.debug("Calling SessionMgr.__createUserSession ...") 
     740        other than the CA. creds may default to None if no user certificate 
     741        is available.  In this case, the Session Manager server certificate 
     742        is used to secure connections to Attribute Authorities and other  
     743        services where required""" 
     744         
     745        log.debug("Calling SessionMgr._createUserSession ...") 
    726746         
    727747        # Check for an existing session for the same user 
    728         try: 
    729             userDN = str(X509CertParse(creds[0]).dn) 
    730              
    731         except Exception, e: 
    732             raise SessionMgrError(\ 
    733                 "Parsing input certificate DN for session create: %s" % \ 
    734                                                                     str(e)) 
    735  
    736         if userDN in self.__dnDict: 
     748        if username in self.__usernameDict: 
    737749            # Update existing session with user cert and add a new  
    738750            # session ID to access it - a single session can be accessed 
     
    740752            # same session from the their desktop PC and their laptop. 
    741753            # Different session IDs are allocated in each case. 
    742             userSess = self.__dnDict[userDN] 
     754            userSess = self.__usernameDict[username] 
    743755            userSess.addNewSessID()             
    744756        else: 
    745             # Create a new user session using the new user certificate 
    746             # and session ID 
    747             # 
     757            # Create a new user session using the username, session ID and 
     758            # X.509 credentials 
    748759            wssSignatureHandlerKw = { 
    749760            'refC14nInclNS': self.__prop.get('refC14nInclNS', []), 
     
    751762 
    752763            try:    
    753                 userSess = UserSession(credRepos=self.__credRepos,  
    754                              caCertFilePathList=self.__prop['caCertFilePathList'], 
    755                              wssSignatureHandlerKw=wssSignatureHandlerKw, 
    756                              *creds)       
     764                userSess = UserSession(username,  
     765                         creds, 
     766                         credentialRepository=self._credentialRepository,  
     767                         caCertFilePathList=self.__prop['caCertFilePathList'], 
     768                         wssSignatureHandlerKw=wssSignatureHandlerKw)       
    757769            except Exception, e: 
    758                 raise SessionMgrError( 
    759                         "Error occurred whilst creating User Session: %s" % e) 
    760  
    761             # Also allow access by user DN 
    762             self.__dnDict[userDN] = userSess 
     770                log.error("Error occurred whilst creating User Session: %s"%e) 
     771                raise  
     772             
     773            # Also allow access by user DN if individual user PKI credentials  
     774            # have been passed in 
     775            if creds is not None: 
     776                try: 
     777                    userDN = str(X509CertParse(creds[0]).dn) 
     778                     
     779                except Exception, e: 
     780                    log.error("Parsing input certificate DN for session create: " 
     781                              "%s" % e) 
     782                    raise 
     783 
     784                self.__dnDict[userDN] = userSess 
     785             
    763786 
    764787         
     
    767790        # Check for unique session ID 
    768791        if newSessID in self.__sessDict: 
    769             raise SessionMgrError( 
    770                 "New Session ID is already in use:\n\n %s" % newSessID) 
     792            raise SessionMgrError("New Session ID is already in use:\n\n %s" %  
     793                                  newSessID) 
    771794 
    772795        # Add new session to list                  
     
    776799        return userSess 
    777800 
    778     def __connect2UserSession(self, userCert=None, sessID=None): 
     801    def _connect2UserSession(self, username=None, userX509Cert=None, sessID=None): 
    779802        """Connect to an existing session by providing a valid session ID or 
    780803        proxy certificate 
    781804 
    782         __connect2UserSession([userCert]|[sessID]) 
    783          
    784         @type userCert: string 
    785         @param userCert: proxy certificate string corresponding to an  
     805        _connect2UserSession([username|userX509Cert]|[sessID]) 
     806 
     807        @type username: string 
     808        @param username: username 
     809         
     810        @type userX509Cert: string 
     811        @param userX509Cert: user's X.509 certificate corresponding to an  
    786812        existing session to connect to. 
    787813         
     
    790816        an existing session.""" 
    791817         
    792         log.debug("Calling SessionMgr.__connect2UserSession ...") 
     818        log.debug("Calling SessionMgr._connect2UserSession ...") 
    793819             
    794820        # Look for a session corresponding to this ID 
    795         if sessID: 
    796             try: 
    797                 # Check matched session has not expired 
    798                 userSess = self.__sessDict[sessID] 
    799                  
    800             except KeyError: 
    801                 # User session not found with given ID 
    802                 raise SessionNotFound, \ 
    803                         "No user session found matching input session ID" 
    804  
    805             log.info("Connecting to session user DN = %s using ID = %s" % \ 
    806                      (userSess.credWallet.userCert.dn, sessID)) 
    807                                 
    808         elif isinstance(userCert, basestring): 
    809             try: 
    810                 userDN = str(X509CertParse(userCert).dn) 
    811                  
    812             except Exception, e: 
    813                 raise SessionMgrError( 
    814                 "Parsing input user certificate DN for session connect: %s" %e) 
    815  
    816             try: 
    817                 userSess = self.__dnDict[userDN] 
    818                          
    819             except KeyError: 
    820                 # User session not found with given proxy cert 
    821                 raise SessionNotFound, \ 
    822                     "No user session found matching input proxy certificate" 
    823              
    824             log.info("Connecting to session ID = %s using cert, DN = %s" % \ 
    825                      (userSess.sessIDlist, userDN)) 
     821        if username: 
     822            userSess = self.__usernameDict.get(username) 
     823            if userSess is None: 
     824                log.error("Session not found for username=%s" % username) 
     825                raise SessionNotFound("No user session found matching the " 
     826                                      "input username") 
     827 
     828            log.info("Connecting to session userDN=%s; sessID=%s using " 
     829                     "username=%s" % (userSess.credWallet.userX509Cert.dn,  
     830                                      userSess.sessIDlist, 
     831                                      username))             
     832        elif sessID: 
     833            userSess = self.__sessDict.get(sessID) 
     834            if userSess is None:   
     835                log.error("Session not found for sessID=%s" % sessID) 
     836                raise SessionNotFound("No user session found matching input " 
     837                                      "session ID") 
     838 
     839            log.info("Connecting to session userDN=%s; username=%s using " 
     840                     "sessID=%s" % (userSess.credWallet.userX509Cert.dn,  
     841                                    username, 
     842                                    userSess.sessIDlist)) 
     843 
     844        elif userX509Cert is not None: 
     845            if isinstance(userX509Cert, basestring): 
     846                try: 
     847                    userDN = str(X509CertParse(userX509Cert).dn) 
    826848                     
    827         elif isinstance(userCert, X509Cert): 
    828             try: 
    829                 userDN = str(userCert.dn) 
    830                  
    831             except Exception, e: 
    832                 raise SessionMgrError(\ 
    833                 "Parsing input user certificate DN for session connect: %s" %e) 
    834              
    835             try: 
    836                 userSess = self.__dnDict[userDN] 
    837                          
    838             except KeyError: 
    839                 # User session not found with given proxy cert 
    840                 raise SessionNotFound, \ 
    841                     "No user session found matching input proxy certificate"             
    842  
    843             log.info("Connecting to session ID = %s using cert, DN = %s" % \ 
    844                      (userSess.sessIDlist, userDN)) 
     849                except Exception, e: 
     850                    log.error("Parsing input user certificate DN for session " 
     851                              "connect: %s" %e) 
     852                    raise 
     853            else: 
     854                try: 
     855                    userDN = str(userX509Cert.dn) 
     856                     
     857                except Exception, e: 
     858                    log.error("Parsing input user certificate DN for session " 
     859                              "connect: %s" % e) 
     860                    raise 
     861                 
     862            userSess = self.__dnDict.get(userDN) 
     863            if userSess is None: 
     864                log.error("Session not found for userDN=%s" % userDN) 
     865                raise SessionNotFound("No user session found matching input " 
     866                                      "user X.509 certificate") 
     867             
     868            log.info("Connecting to session sessID=%s; username=%s using " 
     869                     "userDN=%s" % (userSess.sessIDlist,  
     870                                    userSess.credWallet.username,  
     871                                    userDN)) 
    845872        else: 
    846             raise SessionMgrError,\ 
    847                                 '"sessID" or "userCert" keywords must be set' 
    848                          
     873            raise SessionMgrError('"username", "sessID" or "userX509Cert" keywords ' 
     874                                  'must be set') 
     875             
     876        # Check that the Credentials held in the wallet are still valid             
    849877        try: 
    850878            userSess.credWallet.isValid(raiseExcep=True) 
     
    939967 
    940968    def getAttCert(self, 
     969                   username=None, 
    941970                   userCert=None, 
    942971                   sessID=None, 
     
    946975        certificate is added to the user session credential wallet and also  
    947976        returned from this method 
     977         
     978        A user identifier must be provided in the form of a user ID, user X.509 
     979        certificate or a user session ID 
     980 
     981        @type username: string 
     982        @param username: username to key into their session 
    948983 
    949984        @type userCert: string 
    950         @param userCert: user's certificate to key into their session 
     985        @param userCert: user's X.509 certificate to key into their session 
    951986         
    952987        @type sessID: string 
     
    961996        # Retrieve session corresponding to user's session ID using relevant 
    962997        # input credential 
    963         userSess = self.__connect2UserSession(sessID=sessID,userCert=userCert) 
    964         # User's Credential Wallet carries out attribute request to the 
     998        userSess = self._connect2UserSession(username=username, sessID=sessID,  
     999                                             userCert=userCert) 
     1000         
     1001        # The user's Credential Wallet carries out attribute request to the 
    9651002        # Attribute Authority 
    9661003        try: 
     
    9741011            return None, str(e), e.extAttCertList 
    9751012         
    976     def auditCredRepos(self): 
     1013    def auditCredentialRepository(self): 
    9771014        """Remove expired Attribute Certificates from the Credential 
    9781015        Repository""" 
    979         log.debug("Calling SessionMgr.auditCredRepos ...") 
    980         self.__credRepos.auditCredentials() 
     1016        log.debug("Calling SessionMgr.auditCredentialRepository ...") 
     1017        self._credentialRepository.auditCredentials() 
    9811018         
    9821019         
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/conf/sessionMgrProperties.xml

    r4158 r4279  
    116116        <caCertFile>$NDGSEC_DIR/conf/certs/cacert.pem</caCertFile> 
    117117    </authNServiceProp> 
    118     <!--  
    119     Properties for a Session Manager client to a Simple CA. 
    120     Not currently used and likely to be removed from a future release 
    121     --> 
    122     <simpleCACltProp> 
    123         <uri></uri> 
    124         <xmlSigKeyFile></xmlSigKeyFile> 
    125         <xmlSigCertFile></xmlSigCertFile> 
    126         <xmlSigCertPwd></xmlSigCertPwd> 
    127     </simpleCACltProp> 
    128     <!-- 
    129     <simpleCASrvProp> 
    130         <certExpiryDate></certExpiryDate> 
    131         <certLifetimeDays></certLifetimeDays> 
    132         <certTmpDir></certTmpDir> 
    133         <caCertFile></caCertFile> 
    134         <signExe></signExe> 
    135         <path></path> 
    136     </simpleCASrvProp> 
    137     --> 
    138118    <!-- 
    139119    Settings for Credential Repository plugin 
    140120    --> 
    141     <credReposProp> 
     121    <credentialRepository> 
    142122        <!--  
    143123        File path to plugin module - may be left blank if 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/initCredReposDb.py

    r2942 r4279  
    4141                      "--database-name", 
    4242                      dest="dbName", 
    43                       help="database name - default is \"ndgCredRepos\"") 
     43                      help="database name - default is \"ndgCredentialRepository\"") 
    4444 
    4545    (opt, args) = parser.parse_args() 
     
    5454 
    5555    if not opt.dbName: 
    56         opt.dbName = "ndgCredRepos" 
     56        opt.dbName = "ndgCredentialRepository" 
    5757 
    5858 
     
    6767        dbURI = "mysql://%s:%s@%s/%s" % \ 
    6868                            (opt.username, password, opt.hostname, opt.dbName) 
    69         credRepos = SessionMgrCredRepos(dbURI=dbURI) 
     69        credentialRepository = SessionMgrCredentialRepository(dbURI=dbURI) 
    7070    except Exception, e: 
    7171        sys.stderr.write("%s\n" % str(e)) 
     
    7474    # This method prompts the user for confirmation of table initialisation 
    7575    try: 
    76         credRepos._initTables() 
     76        credentialRepository._initTables() 
    7777    except Exception, e: 
    7878        sys.stderr.write("Error creating tables: %s\n" % str(e)) 
  • TI12-security/trunk/python/ndg.security.server/setup.py

    r4150 r4279  
    3939#    [console_scripts]  
    4040#    myproxy-client=ndg.security.server.MyProxy:main 
    41 #    init-credrepos-db=ndg.security.server.initCredReposDb:main 
     41#    init-credrepos-db=ndg.security.server.initCredentialRepositoryDb:main 
    4242# 
    4343#    [paste.app_factory] 
     
    4949    [console_scripts]  
    5050    myproxy-client=ndg.security.server.MyProxy:main 
    51     init-credrepos-db=ndg.security.server.initCredReposDb:main 
     51    init-credrepos-db=ndg.security.server.initCredentialRepositoryDb:main 
    5252 
    5353    [paste.app_factory] 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/attAuthority/AttAuthorityClientTest.py

    r4254 r4279  
    1515import unittest 
    1616import os, sys, getpass, re 
    17 from ConfigParser import SafeConfigParser 
    1817import logging 
    1918logging.basicConfig() 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/sessionMgr/test.py

    r4158 r4279  
    11#!/usr/bin/env python 
    22"""Test harness for NDG Session Manager - makes requests for  
    3 authentication and authorisation.  An Attribute Authority and Simple CA 
    4 services must be running for the reqAuthorisation and addUser tests 
     3authentication and authorisation.  Attribute Authority services must be running 
     4for *AttCert* test methods 
    55 
    66NERC Data Grid Project 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/sessionMgrClient/wsgi/session-manager.ini

    r4262 r4279  
    1616wsseCfgFileSection = WS-Security 
    1717 
    18 # Session Manager specific settings 
    19 # the port number the service is to run on  
     18# Session Manager specific settings - commented out settings will take their 
     19# default settings.  To override the defaults uncomment and set as required. 
     20# See ndg.security.server.sessionMgr.SessionMgr class for details 
    2021 
    2122# Flag for SSL - set to something to stipulate http, leave blank to use http  
    22 sessionmanager.useSSL:  
     23#SessionManager.useSSL:  
    2324 
    2425# X.509 certificate for SSL connections - ignored if useSSL is blank  
    25 sessionmanager.sslCertFile: $NDGSEC_AACLNT_UNITTEST_DIR/hostcert.pem 
     26#SessionManager.sslCertFile: $NDGSEC_SMCLNT_UNITTEST_DIR/hostcert.pem 
    2627 
    2728# Private key file for SSL  - ignored if useSSL is blank  
    28 sessionmanager.sslKeyFile: $NDGSEC_AACLNT_UNITTEST_DIR/hostkey.pem 
     29#SessionManager.sslKeyFile: $NDGSEC_SMCLNT_UNITTEST_DIR/hostkey.pem 
    2930 
    3031# Directory containing CA cert.s to verify SSL peer cert against - ignored if  
    3132# useSSL is blank  
    32 sessionmanager.sslCACertDir: $NDGSEC_AACLNT_UNITTEST_DIR/certs/ca 
    33   
    34 # Domain defaults to the server host - any more generic setting could be a  
    35 # a security risk.  Leave blank to default to the fully qualified domain 
    36 # name of the server. 
    37 cookieDomain:  
     33#SessionManager.sslCACertDir: $NDGSEC_SMCLNT_UNITTEST_DIR/certs/ca 
     34 
     35# On receipt of Attribute Certificates from Attribute Authorities, the 
     36# signature of the Attribute Certificate needs to be checked.  This list of 
     37# CA certs. enables the X,509 certificate used in the signature to be  
     38# validated 
     39SessionManager.credentialWallet.caCertFilePathList: $NDGSEC_SMCLNT_UNITTEST_DIR/ca/ndg-test-ca.crt 
     40 
     41# Settings for the Credential Repository - NullCredRepos is  
     42#SessionManager.credentialRepository.modFilePath:  
     43#SessionManager.credentialRepository.modName: ndg.security.common.CredWallet 
     44#SessionManager.credentialRepository.className: NullCredRepos 
     45#SessionManager.credentialRepository.propFile: 
    3846 
    3947[server:main] 
     
    5462ServiceSOAPBindingClass = ndg.security.server.zsi.sessionmanager.SessionManagerWS 
    5563ServiceSOAPBindingPropPrefix = SessionManager 
    56 SessionManager.propPrefix = sessionmanager 
    57 SessionManager.propFilePath = $NDGSEC_AACLNT_UNITTEST_DIR/wsgi/session-manager.ini 
     64SessionManager.propPrefix = SessionManager 
     65SessionManager.propFilePath = $NDGSEC_SMCLNT_UNITTEST_DIR/wsgi/session-manager.ini 
    5866referencedFilters = wsseSignatureVerificationFilter01 
    5967path = /SessionManager 
     
    8492# Certificate associated with private key used to sign a message.  The sign  
    8593# method will add this to the BinarySecurityToken element of the WSSE header.   
    86 signingCertFilePath=$NDGSEC_AACLNT_UNITTEST_DIR/sm.crt 
    87 #signingCertFilePath=$NDGSEC_AACLNT_UNITTEST_DIR/java-ca-server.crt 
     94signingCertFilePath=$NDGSEC_SMCLNT_UNITTEST_DIR/sm.crt 
     95#signingCertFilePath=$NDGSEC_SMCLNT_UNITTEST_DIR/java-ca-server.crt 
    8896 
    8997# PEM encoded private key file 
    90 signingPriKeyFilePath=$NDGSEC_AACLNT_UNITTEST_DIR/sm.key 
    91 #signingPriKeyFilePath=$NDGSEC_AACLNT_UNITTEST_DIR/java-ca-server.key 
     98signingPriKeyFilePath=$NDGSEC_SMCLNT_UNITTEST_DIR/sm.key 
     99#signingPriKeyFilePath=$NDGSEC_SMCLNT_UNITTEST_DIR/java-ca-server.key 
    92100 
    93101# Set the ValueType for the BinarySecurityToken added to the WSSE header for a 
     
    112120 
    113121# Provide a space separated list of file paths 
    114 caCertFilePathList=$NDGSEC_AACLNT_UNITTEST_DIR/ca/ndg-test-ca.crt  
    115 #caCertFilePathList=$NDGSEC_AACLNT_UNITTEST_DIR/ca/ndg-test-ca.crt $NDGSEC_AACLNT_UNITTEST_DIR/ca/java-ca.crt 
     122caCertFilePathList=$NDGSEC_SMCLNT_UNITTEST_DIR/ca/ndg-test-ca.crt  
     123#caCertFilePathList=$NDGSEC_SMCLNT_UNITTEST_DIR/ca/ndg-test-ca.crt $NDGSEC_SMCLNT_UNITTEST_DIR/ca/java-ca.crt 
    116124 
    117125 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/sessionMgrClient/wsgi/sessionManagerServerApp.py

    r4262 r4279  
    2323 
    2424# Initialize environment for unit tests 
    25 if 'NDGSEC_AACLNT_UNITTEST_DIR' not in os.environ: 
    26     os.environ['NDGSEC_AACLNT_UNITTEST_DIR'] = \ 
     25if 'NDGSEC_SMCLNT_UNITTEST_DIR' not in os.environ: 
     26    os.environ['NDGSEC_SMCLNT_UNITTEST_DIR'] = \ 
    2727                    os.path.dirname(os.path.abspath(os.path.dirname(__file__))) 
    2828     
    2929if 'NDGSEC_AA_PROPFILEPATH' not in os.environ: 
    3030    os.environ['NDGSEC_AA_PROPFILEPATH'] = \ 
    31                         os.path.join(os.environ['NDGSEC_AACLNT_UNITTEST_DIR'], 
     31                        os.path.join(os.environ['NDGSEC_SMCLNT_UNITTEST_DIR'], 
    3232#                                     "sessionMgr.cfg") 
    3333                                     "sessionMgrProperties.xml") 
Note: See TracChangeset for help on using the changeset viewer.