Changeset 5644


Ignore:
Timestamp:
20/08/09 11:52:07 (10 years ago)
Author:
pjkersha
Message:

Added ndg.security.server.wsgi.attributeauthority.AttributeAuthorityMiddleware?: sets an ndg.security.server.attributeauthority.AttributeAuthority? instance as a key in environ.

Location:
TI12-security/trunk/python
Files:
4 added
2 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/attributeauthority.py

    r5643 r5644  
    450450         
    451451    @classmethod 
    452     def fromPropertyFile(cls, propFilePath=None, bReadMapConfig=True): 
     452    def fromPropertyFile(cls, propFilePath=None, propFileSection='DEFAULT', 
     453                         propPrefix='attributeauthority.',  
     454                         bReadMapConfig=True): 
    453455        """Create new NDG Attribute Authority instance from the property file 
    454456        settings 
     
    458460        configuration parameters.  It defaults to $NDGSEC_AA_PROPFILEPATH or 
    459461        if not set, $NDGSEC_DIR/conf/attributeAuthority.cfg 
    460         - if the filename ends with 'xml', it is assumed to be in the xml  
    461         format 
    462         - otherwise it is assumed to be a flat text 'ini' type file 
    463462        @type propFileSection: basestring 
    464         @param propFileSection: section of properties file to read from.  This 
    465         applies to ini format files only and is ignored for XML format 
     463        @param propFileSection: section of properties file to read from. 
    466464        properties files 
     465        @type propPrefix: basestring 
     466        @param propPrefix: set a prefix for filtering attribute authority 
     467        property names - useful where properties are being parsed from a file 
     468        section containing parameter names for more than one application 
    467469        @type bReadMapConfig: boolean 
    468470        @param bReadMapConfig: by default the Map Configuration file is  
     
    471473             
    472474        attributeAuthority = AttributeAuthority() 
    473         attributeAuthority.propFilePath = propFilePath 
    474              
     475        if propFileSection: 
     476            attributeAuthority.propFileSection = propFileSection 
     477             
     478        if propPrefix: 
     479            attributeAuthority.propPrefix = propPrefix 
     480 
     481        attributeAuthority.propFilePath = propFilePath             
    475482        attributeAuthority.readProperties() 
    476  
     483        attributeAuthority.initialise(bReadMapConfig=bReadMapConfig) 
     484     
     485        return attributeAuthority 
     486 
     487         
     488    @classmethod 
     489    def fromProperties(cls, propPrefix='attributeauthority.',  
     490                       bReadMapConfig=True, **prop): 
     491        """Create new NDG Attribute Authority instance from input property 
     492        keywords 
     493 
     494        @type propPrefix: basestring 
     495        @param propPrefix: set a prefix for filtering attribute authority 
     496        property names - useful where properties are being parsed from a file 
     497        section containing parameter names for more than one application 
     498        @type bReadMapConfig: boolean 
     499        @param bReadMapConfig: by default the Map Configuration file is  
     500        read.  Set this flag to False to override. 
     501        """ 
     502        attributeAuthority = AttributeAuthority() 
     503        if propPrefix: 
     504            attributeAuthority.propPrefix = propPrefix 
     505                
     506        attributeAuthority.setProperties(**prop) 
     507        attributeAuthority.initialise(bReadMapConfig=bReadMapConfig) 
     508         
     509        return attributeAuthority 
     510     
     511    def initialise(self, bReadMapConfig=True): 
     512        """Convenience method for set up of Attribute Interface, map 
     513        configuration and PKI""" 
     514         
    477515        # Read the Map Configuration file 
    478516        if bReadMapConfig: 
    479             attributeAuthority.readMapConfig() 
     517            self.readMapConfig() 
    480518 
    481519        # Instantiate Certificate object 
    482520        log.debug("Reading and checking Attribute Authority X.509 cert. ...") 
    483         attributeAuthority.cert = X509Cert.Read( 
    484                                         attributeAuthority.signingCertFilePath) 
     521        self.cert = X509Cert.Read(self.signingCertFilePath) 
    485522 
    486523        # Check it's valid 
    487524        try: 
    488             attributeAuthority.cert.isValidTime(raiseExcep=True) 
     525            self.cert.isValidTime(raiseExcep=True) 
    489526             
    490527        except Exception, e: 
     
    494531        # Check CA certificate 
    495532        log.debug("Reading and checking X.509 CA certificate ...") 
    496         for caCertFile in attributeAuthority.caCertFilePathList: 
     533        for caCertFile in self.caCertFilePathList: 
    497534            caCert = X509Cert(caCertFile) 
    498535            caCert.read() 
     
    507544        # Issuer details - serialise using the separator string set in the 
    508545        # properties file 
    509         attributeAuthority.issuer = attributeAuthority.cert.dn.serialise( 
    510                                     separator=attributeAuthority.dnSeparator) 
    511  
    512         attributeAuthority.issuerSerialNumber = \ 
    513                                         attributeAuthority.cert.serialNumber 
     546        self.issuer = self.cert.dn.serialise(separator=self.dnSeparator) 
     547 
     548        self.issuerSerialNumber = self.cert.serialNumber 
    514549         
    515550        # Load user - user attribute look-up plugin  
    516         attributeAuthority.initAttributeInterface() 
    517          
    518         attCertFilePath = os.path.join(attributeAuthority.attCertDir,  
    519                                        attributeAuthority.attCertFileName) 
     551        self.initAttributeInterface() 
     552         
     553        attCertFilePath = os.path.join(self.attCertDir, self.attCertFileName) 
    520554                 
    521555        # Rotating file handler used for logging attribute certificates  
    522556        # issued. 
    523         attributeAuthority.attCertLog = AttCertLog(attCertFilePath, 
    524                                 backUpCnt=attributeAuthority.attCertFileLogCnt) 
    525      
    526         return attributeAuthority 
     557        self.attCertLog = AttCertLog(attCertFilePath, 
     558                                     backUpCnt=self.attCertFileLogCnt) 
    527559 
    528560    def setProperties(self, **prop): 
     
    587619         
    588620        modName = classProperties.pop('modName') 
    589         className = classProperties.pop('className')       
    590         modFilePath = classProperties.pop('modFilePath')  
     621        className = classProperties.pop('className')   
     622         
     623        # file path may be omitted     
     624        modFilePath = classProperties.pop('modFilePath', None)  
    591625                       
    592626        self.__attributeInterface = instantiateClass(modName, 
    593                                          className, 
    594                                          moduleFilePath=modFilePath, 
    595                                          objectType=AttributeInterface, 
    596                                          classProperties=classProperties) 
     627                                             className, 
     628                                             moduleFilePath=modFilePath, 
     629                                             objectType=AttributeInterface, 
     630                                             classProperties=classProperties) 
    597631 
    598632    def setPropFilePath(self, val=None): 
     
    10131047             
    10141048        except IOError, e: 
    1015             raise AttributeAuthorityConfigError('Error parsing properties ' 
    1016                                                 'file "%s": %s' %  
    1017                                                 (e.filename,e.strerror))           
     1049            raise AttributeAuthorityConfigError('Error parsing Map ' 
     1050                                                'Configuration file "%s": %s' %  
     1051                                                (e.filename, e.strerror))           
    10181052        except Exception, e: 
    10191053            raise AttributeAuthorityConfigError('Error parsing Map ' 
    10201054                                                'Configuration file: "%s": %s'%  
    1021                                                 (self.mapConfigFilePath,  
    1022                                                  e)) 
    1023  
    1024              
     1055                                                (self.mapConfigFilePath, e)) 
     1056        
    10251057        trustedElem = rootElem.findall('trusted') 
    10261058        if not trustedElem:  
     
    10361068        # 2) hosts corresponding to a given role and 
    10371069        # 3) roles of external data centre to this data centre 
    1038         self._localRole2TrustedHost = {} 
     1070        self.__localRole2TrustedHost = {} 
    10391071        self.__localRole2RemoteRole = {} 
    10401072        self.__remoteRole2LocalRole = {} 
    1041  
    10421073 
    10431074        # Information about this host 
     
    10591090                                                '"%s"' %  
    10601091                                                self.mapConfigFilePath) 
    1061  
    10621092 
    10631093        # hostname is also stored in the AA's config file in the 'name' tag.   
     
    10831113                raise AttributeAuthorityConfigError('<thisHost> option <%s> ' 
    10841114                                                    'must be set.' % k) 
    1085             self.__mapConfig['thisHost'][hostName][k] = val 
    1086                  
     1115            self.__mapConfig['thisHost'][hostName][k] = val      
    10871116         
    10881117        # Information about trusted hosts 
     
    10941123                raise AttributeAuthorityConfigError('Error reading trusted ' 
    10951124                                                    'host name: %s' % e) 
    1096  
    1097              
     1125  
    10981126            # Add signatureFile and list of roles 
    10991127            # 
     
    11431171                     
    11441172                # Role to host look-up 
    1145                 if localRole in self._localRole2TrustedHost: 
     1173                if localRole in self.__localRole2TrustedHost: 
    11461174                     
    11471175                    if trustedHost not in \ 
    1148                        self._localRole2TrustedHost[localRole]: 
    1149                         self._localRole2TrustedHost[localRole].\ 
     1176                       self.__localRole2TrustedHost[localRole]: 
     1177                        self.__localRole2TrustedHost[localRole].\ 
    11501178                                                        append(trustedHost)                         
    11511179                else: 
    1152                     self._localRole2TrustedHost[localRole] = [trustedHost] 
     1180                    self.__localRole2TrustedHost[localRole] = [trustedHost] 
    11531181 
    11541182 
     
    12641292            # Get trusted hosts for given input local role         
    12651293            try: 
    1266                 trustedHosts = self._localRole2TrustedHost[role] 
     1294                trustedHosts = self.__localRole2TrustedHost[role] 
    12671295            except: 
    12681296                raise AttributeAuthorityNoMatchingRoleInTrustedHosts( 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/wsgi/attributeauthority.py

    r5643 r5644  
    2222    DEFAULT_KEYNAME = 'ndg.security.server.attributeauthority' 
    2323    ENVIRON_KEYNAME_PARAMNAME = 'environKeyName' 
    24      
    25     # Enable Attribute Authority properties to be included in app_conf 
    26 #    propertyDefaults = { 
    27 #        ENVIRON_KEYNAME_PARAMNAME: DEFAULT_KEYNAME 
    28 #    } 
    29 #    propertyDefaults.update(NDGSecurityMiddlewareBase.propertyDefaults) 
    30 #    propertyDefaults.update(AttributeAuthority.propertyDefaults) 
    31      
    32     def __init__(self,app,global_conf,prefix='attributeauthority.',**app_conf): 
     24         
     25    def __init__(self, app, global_conf, prefix='attributeauthority.', 
     26                 **app_conf): 
    3327        '''Set-up an Attribute Authority instance 
    3428         
     
    5347 
    5448        # Set key name for attribute authority set in environ 
    55         self.__keyName = app_conf.pop( 
    56                         AttributeAuthorityMiddleware.ENVIRON_KEYNAME_PARAMNAME, 
    57                         AttributeAuthorityMiddleware.DEFAULT_KEYNAME) 
     49        environKeyOptName = prefix + \ 
     50                        AttributeAuthorityMiddleware.ENVIRON_KEYNAME_PARAMNAME 
     51        self.__keyName = app_conf.pop(environKeyOptName, 
     52                                AttributeAuthorityMiddleware.DEFAULT_KEYNAME) 
    5853         
    59         self.__aa = AttributeAuthority() 
    60         self.__aa.setProperties(**app_conf) 
    61         self.__aa.initAttributeInterface() 
    62         self.__aa.readMapConfig() 
    63          
     54        self.__aa = AttributeAuthority.fromProperties(propPrefix=prefix, 
     55                                                      **app_conf) 
     56        
    6457    def __call__(self, environ, start_response): 
    6558        '''Set the Attribute Authority instantiated at initialisation in  
     
    7366        @return: next application in the WSGI stack 
    7467        ''' 
    75         environ[self.__keyName] = self.__aa 
     68        environ[self.keyName] = self.aa 
    7669        return self._app(environ, start_response) 
     70     
     71    def _get_aa(self): 
     72        return self.__aa 
     73     
     74    def _set_aa(self, val): 
     75        if not isinstance(val, AttributeAuthority): 
     76            raise TypeError('Expecting %r for "aa" attribute; got %r' % 
     77                            (AttributeAuthority, type(val))) 
     78             
     79    aa = property(fget=_get_aa, 
     80                  fset=_set_aa, 
     81                  doc="Attribute Authority instance") 
     82 
     83    def _getKeyName(self): 
     84        return self.__keyName 
     85 
     86    def _setKeyName(self, val): 
     87        if not isinstance(val, basestring): 
     88            raise TypeError('Expecting %r for "keyName" attribute; got %r' % 
     89                            (basestring, type(val))) 
     90        self.__keyName = val 
    7791         
     92    keyName = property(fget=_getKeyName,  
     93                       fset=_setKeyName,  
     94                       doc="Key name used to index Attribute Authority in " 
     95                           "environ dictionary") 
Note: See TracChangeset for help on using the changeset viewer.