Changeset 6719


Ignore:
Timestamp:
11/03/10 09:29:21 (10 years ago)
Author:
pjkersha
Message:

Refactoring Attribute Authority to remove NDG Attribute Certificate and role mapping code.

Location:
TI12-security/trunk/NDGSecurity/python
Files:
3 edited

Legend:

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

    r6686 r6719  
    5959 
    6060class AttributeAuthority(object): 
    61     """NDG Attribute Authority - service for allocation of user authorization 
    62     tokens - attribute certificates. 
     61    """NDG Attribute Authority - rewritten with a SAML 2.0 Attribute Query  
     62    interface for Earth System Grid 
    6363     
    6464    @type propertyDefaults: dict 
    6565    @cvar propertyDefaults: valid configuration property keywords 
    6666     
    67     @type attributeInterfacePropertyDefaults: dict 
    68     @cvar attributeInterfacePropertyDefaults: valid configuration property  
     67    @type ATTRIBUTE_INTERFACE_PROPERTY_DEFAULTS: dict 
     68    @cvar ATTRIBUTE_INTERFACE_PROPERTY_DEFAULTS: valid configuration property  
    6969    keywords for the Attribute Interface plugin 
    7070     
     
    7777    under DEFAULT_CONFIG_DIRNAME 
    7878     
    79     @type ATTRIBUTE_INTERFACE_KEYNAME: basestring 
    80     @param ATTRIBUTE_INTERFACE_KEYNAME: attribute interface parameters key  
     79    @type ATTRIBUTE_INTERFACE_OPTPREFIX: basestring 
     80    @param ATTRIBUTE_INTERFACE_OPTPREFIX: attribute interface parameters key  
    8181    name - see initAttributeInterface for details 
    8282    """ 
    8383 
    84     # Code designed from NERC Data Grid Enterprise and Information Viewpoint 
    85     # documents. 
    86     # 
    87     # Also, draws from Neil Bennett's ACServer class used in the Java 
    88     # implementation of NDG Security 
    89  
    9084    DEFAULT_CONFIG_DIRNAME = "conf" 
    9185    DEFAULT_PROPERTY_FILENAME = "attributeAuthority.cfg" 
    92     ATTRIBUTE_INTERFACE_KEYNAME = 'attributeInterface' 
     86     
     87    # Config file special parameters 
     88    HERE_OPTNAME = 'here' 
     89    PREFIX_OPTNAME = 'prefix' 
     90     
     91    # Config file option names 
     92    ISSUER_NAME_OPTNAME = 'issuerName' 
     93    ASSERTION_LIFETIME_OPTNAME = 'assertionLifetime' 
     94    DN_SEPARATOR_OPTNAME = 'dnSeparator' 
     95     
     96    ATTRIBUTE_INTERFACE_OPTPREFIX = 'attributeInterface' 
     97    ATTRIBUTE_INTERFACE_MOD_FILEPATH_OPTNAME = 'modFilePath' 
     98    ATTRIBUTE_INTERFACE_CLASSNAME_OPTNAME = 'className' 
     99     
    93100    CONFIG_LIST_SEP_PAT = re.compile(',\s*') 
    94101     
    95     attributeInterfacePropertyDefaults = { 
    96         'modFilePath':  '', 
    97         'className':    '' 
     102     
     103    ATTRIBUTE_INTERFACE_PROPERTY_DEFAULTS = { 
     104        ATTRIBUTE_INTERFACE_MOD_FILEPATH_OPTNAME:  '', 
     105        ATTRIBUTE_INTERFACE_CLASSNAME_OPTNAME:    '' 
    98106    } 
    99107     
     
    102110    # in the config 
    103111    propertyDefaults = {  
    104         'issuerName':                   '', 
    105         'assertionLifetime':              -1, 
    106         'dnSeparator':                  '/', 
    107         ATTRIBUTE_INTERFACE_KEYNAME:    attributeInterfacePropertyDefaults 
     112        ISSUER_NAME_OPTNAME:            '', 
     113        ASSERTION_LIFETIME_OPTNAME:     -1, 
     114        DN_SEPARATOR_OPTNAME:           '/', 
     115        ATTRIBUTE_INTERFACE_OPTPREFIX:  ATTRIBUTE_INTERFACE_PROPERTY_DEFAULTS 
    108116    } 
    109117 
     118    __slots__ = ( 
     119        '__issuerName',  
     120        '__assertionLifetime',  
     121        '__dnSeparator', 
     122        '__propFilePath', 
     123        '__propFileSection', 
     124        '__propPrefix', 
     125        '__attributeInterfaceCfg' 
     126    ) 
     127     
    110128    def __init__(self): 
    111129        """Create new Attribute Authority instance""" 
     
    113131         
    114132        # Initial config file property based attributes 
    115         for name, val in AttributeAuthority.propertyDefaults.items(): 
    116             setattr(self, '_AttributeAuthority__%s' % name, val) 
     133        self.__issuerName = None 
     134        self.__assertionLifetime = None 
     135        self.__dnSeparator = None 
    117136         
    118137        self.__propFilePath = None         
     
    285304         
    286305    @classmethod 
    287     def fromPropertyFile(cls, propFilePath=None, propFileSection='DEFAULT', 
    288                          propPrefix='attributeauthority.'): 
     306    def fromPropertyFile(cls, propFilePath=None, section='DEFAULT', 
     307                         prefix='attributeauthority.'): 
    289308        """Create new NDG Attribute Authority instance from the property file 
    290309        settings 
     
    294313        configuration parameters.  It defaults to $NDGSEC_AA_PROPFILEPATH or 
    295314        if not set, $NDGSEC_DIR/conf/attributeAuthority.cfg 
    296         @type propFileSection: basestring 
    297         @param propFileSection: section of properties file to read from. 
     315        @type section: basestring 
     316        @param section: section of properties file to read from. 
    298317        properties files 
     318        @type prefix: basestring 
     319        @param prefix: set a prefix for filtering attribute authority 
     320        property names - useful where properties are being parsed from a file 
     321        section containing parameter names for more than one application 
     322        """ 
     323             
     324        attributeAuthority = AttributeAuthority() 
     325        if section: 
     326            attributeAuthority.propFileSection = section 
     327             
     328        if prefix: 
     329            attributeAuthority.propPrefix = prefix 
     330 
     331        # If path is None it will default to setting derived from environment 
     332        # variable - see setPropFilePath() 
     333        attributeAuthority.propFilePath = propFilePath 
     334                      
     335        attributeAuthority.readProperties() 
     336        attributeAuthority.initialise() 
     337     
     338        return attributeAuthority 
     339 
     340    @classmethod 
     341    def fromProperties(cls, prefix='attributeauthority.', **prop): 
     342        """Create new NDG Attribute Authority instance from input property 
     343        keywords 
     344 
    299345        @type propPrefix: basestring 
    300346        @param propPrefix: set a prefix for filtering attribute authority 
    301347        property names - useful where properties are being parsed from a file 
    302348        section containing parameter names for more than one application 
    303         @type bReadMapConfig: boolean 
    304         @param bReadMapConfig: by default the Map Configuration file is  
    305         read.  Set this flag to False to override. 
    306         """ 
    307              
     349        """ 
    308350        attributeAuthority = AttributeAuthority() 
    309         if propFileSection: 
    310             attributeAuthority.propFileSection = propFileSection 
    311              
    312         if propPrefix: 
    313             attributeAuthority.propPrefix = propPrefix 
    314  
    315         attributeAuthority.propFilePath = propFilePath             
    316         attributeAuthority.readProperties() 
    317         attributeAuthority.initialise() 
    318      
    319         return attributeAuthority 
    320  
    321     @classmethod 
    322     def fromProperties(cls, propPrefix='attributeauthority.', **prop): 
    323         """Create new NDG Attribute Authority instance from input property 
    324         keywords 
    325  
    326         @type propPrefix: basestring 
    327         @param propPrefix: set a prefix for filtering attribute authority 
    328         property names - useful where properties are being parsed from a file 
    329         section containing parameter names for more than one application 
    330         """ 
    331         attributeAuthority = AttributeAuthority() 
    332         if propPrefix: 
    333             attributeAuthority.propPrefix = propPrefix 
     351        if prefix: 
     352            attributeAuthority.propPrefix = prefix 
    334353                
    335354        attributeAuthority.setProperties(**prop) 
     
    358377        # '+ 1' allows for the dot separator  
    359378        lenAttributeInterfacePrefix = len( 
    360                             AttributeAuthority.ATTRIBUTE_INTERFACE_KEYNAME) + 1 
     379                        AttributeAuthority.ATTRIBUTE_INTERFACE_OPTPREFIX) + 1 
    361380         
    362381        for name, val in prop.items(): 
     
    364383                name = name[lenPropPrefix:] 
    365384             
    366             if name.startswith(AttributeAuthority.ATTRIBUTE_INTERFACE_KEYNAME): 
     385            if name.startswith( 
     386                            AttributeAuthority.ATTRIBUTE_INTERFACE_OPTPREFIX): 
    367387                name = name[lenAttributeInterfacePrefix:] 
    368388                self.attributeInterfaceCfg[name] = val 
     
    392412                          self.propFilePath) 
    393413             
    394         defaultItems = {'here': os.path.dirname(self.propFilePath)} 
     414        defaultItems = { 
     415            AttributeAuthority.HERE_OPTNAME: os.path.dirname(self.propFilePath) 
     416        } 
    395417         
    396418        cfg = CaseSensitiveConfigParser(defaults=defaultItems) 
    397419        cfg.read(self.propFilePath) 
    398420         
     421        if cfg.has_option(self.propFileSection,  
     422                          AttributeAuthority.PREFIX_OPTNAME): 
     423            self.propPrefix = cfg.get(self.propFileSection,  
     424                                      AttributeAuthority.PREFIX_OPTNAME) 
     425             
    399426        cfgItems = dict([(name, val)  
    400427                         for name, val in cfg.items(self.propFileSection) 
    401                          if name != 'here']) 
     428                         if (name != AttributeAuthority.HERE_OPTNAME and  
     429                             name != AttributeAuthority.PREFIX_OPTNAME)]) 
    402430        self.setProperties(**cfgItems) 
    403431 
     
    416444        modFilePath = classProperties.pop('modFilePath', None)  
    417445                       
    418         self.__attributeInterface = instantiateClass(modName, 
    419                                              className, 
     446        self.__attributeInterface = instantiateClass(className, 
    420447                                             moduleFilePath=modFilePath, 
    421448                                             objectType=AttributeInterface, 
  • TI12-security/trunk/NDGSecurity/python/ndg_security_test/ndg/security/test/unit/attributeauthority/test_attributeauthority.cfg

    r6686 r6719  
    88 
    99[DEFAULT] 
    10 prefix='attribute-authority.' 
     10prefix=attribute-authority. 
    1111attribute-authority.assertionLifetime = 3600 
    1212attribute-authority.issuerName = /O=My Organisation/OU=Centre/CN=Attribute Authority  
  • TI12-security/trunk/NDGSecurity/python/ndg_security_test/ndg/security/test/unit/attributeauthority/test_attributeauthority.py

    r6686 r6719  
    2929    CaseSensitiveConfigParser) 
    3030from ndg.security.server.attributeauthority import (AttributeAuthority,  
    31     SQLAlchemyAttributeInterface, InvalidAttributeFormat) 
     31    SQLAlchemyAttributeInterface, InvalidAttributeFormat, AttributeInterface) 
    3232 
    3333from ndg.saml.saml2.core import (Response, Attribute, SAMLVersion, Subject,  
     
    5454        self.assert_(aa.issuerName == cls.ISSUER_NAME) 
    5555         
    56     def test02FromPropertis(self): 
     56    def test02FromProperties(self): 
    5757         
    5858        # Casts from string to float 
    5959        assertionLifetime = "86400" 
    6060        issuerName = 'My issuer' 
     61        attributeInterfaceClassName = ('ndg.security.server.attributeauthority.' 
     62                                       'AttributeInterface') 
     63         
    6164        aa = AttributeAuthority.fromProperties(issuerName=issuerName, 
    62                                             assertionLifetime=assertionLifetime) 
     65                    assertionLifetime=assertionLifetime, 
     66                    attributeInterface_className=attributeInterfaceClassName) 
     67         
    6368        self.assert_(aa) 
    6469        self.assert_(aa.assertionLifetime == float(assertionLifetime)) 
    6570        self.assert_(aa.issuerName == issuerName) 
     71        self.assert_(isinstance(aa.attributeInterface, AttributeInterface)) 
    6672 
    6773 
Note: See TracChangeset for help on using the changeset viewer.