Ignore:
Timestamp:
21/01/11 17:41:30 (10 years ago)
Author:
pjkersha
Message:

Incomplete - task 16: NDG Security 2.x.x - incl. updated Paster templates

  • integrating SQLite test user db into 'Site A' test Attribute Authority
File:
1 edited

Legend:

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

    r7698 r7827  
    4040from ndg.security.common.utils import TypedList 
    4141from ndg.security.common.utils.classfactory import instantiateClass 
     42from ndg.security.common.utils.factory import importModuleObject 
    4243from ndg.security.common.utils.configfileparsers import ( 
    4344    CaseSensitiveConfigParser) 
     
    910911     
    911912    SAML_ATTRIBUTE2SQLQUERY_ATTRNAME_DELIMITERS = ('.', '_') 
    912      
     913    SAML_ATTRIBUTE2SQLQUERY_ATTRVAL_PAT = re.compile('\"\W+\"') 
     914              
    913915    __slots__ = ( 
    914916        CONNECTION_STRING_OPTNAME, 
     
    973975            # found.  The first item is the attribute name and the second, the 
    974976            # corresponding SQL query to get the values corresponding to that 
    975             # name.             
    976             samlAttributeName, samlAttributeSqlQuery = value.split(None, 1) 
     977            # name.  An optional 3rd element is a callback which converts the 
     978            # retrieved SQL query result to required the attribute value type.   
     979            # This defaults to do a conversion to XS:String if not explicitly  
     980            # set        
     981            attr2sqlQueryOpts = \ 
     982                self.__class__.SAML_ATTRIBUTE2SQLQUERY_ATTRVAL_PAT.split(value) 
     983            if len(attr2sqlQueryOpts) > 2: 
     984                (samlAttributeName,  
     985                 samlAttributeSqlQuery,  
     986                 samlAttributeValueParserName) = attr2sqlQueryOpts 
     987                 
     988                # Get parser from module path provided 
     989                samlAttributeParser = importModuleObject( 
     990                                        samlAttributeValueParserName.strip('"')) 
     991            else: 
     992                # No attribute value conversion callback given - default to  
     993                # XS:String 
     994                samlAttributeName, samlAttributeSqlQuery = attr2sqlQueryOpts 
     995                samlAttributeParser = self.xsstringAttributeValueParser 
    977996             
    978997            # Items may be quoted with " quotes 
    979             self.__samlAttribute2SqlQuery[samlAttributeName.strip('"') 
    980                                           ] = samlAttributeSqlQuery.strip('"') 
     998            samlAttributeName = samlAttributeName.strip('"') 
     999             
     1000            # Set mapping of attribute name to SQL query + conversion routine 
     1001            # tuple 
     1002            self.__samlAttribute2SqlQuery[samlAttributeName 
     1003                ] = (samlAttributeSqlQuery.strip('"'), samlAttributeParser) 
    9811004        else: 
    9821005            raise AttributeError("'SQLAlchemyAttributeInterface' has no " 
    9831006                                 "attribute %r" % name) 
    9841007 
     1008    def xsstringAttributeValueParser(self, attrVal): 
     1009        """Convert string attribute value retrieved from database query into  
     1010        the respective SAML Attribute Value type 
     1011        """ 
     1012        return XSStringAttributeValue(attrVal) 
     1013     
    9851014    def setProperties(self, prefix='', **properties): 
    9861015        for name, val in properties.items(): 
     
    12551284                attribute.friendlyName = requestedAttribute.friendlyName 
    12561285 
     1286            # Call specific conversion utility to convert the retrieved field 
     1287            # to the correct SAML attribute value type 
     1288            field2SamlAttributeVal = self.samlAttribute2SqlQuery[ 
     1289                                        requestedAttribute.nameFormat](-1) 
    12571290            for val in attributeVals: 
    1258                 attribute.attributeValues.append(XSStringAttributeValue()) 
    1259                 attribute.attributeValues[-1].value = val 
     1291                attributeValue = field2SamlAttributeVal(self, val) 
     1292                attribute.attributeValues.append(attributeValue) 
     1293#                attribute.attributeValues.append(XSStringAttributeValue()) 
     1294#                attribute.attributeValues[-1].value = val 
    12601295 
    12611296            attributeStatement.attributes.append(attribute) 
     
    13341369        dbEngine = create_engine(self.connectionString) 
    13351370         
    1336         queryTmpl = self.samlAttribute2SqlQuery.get(attributeName) 
     1371        queryTmpl = self.samlAttribute2SqlQuery.get(attributeName)[0] 
    13371372        if queryTmpl is None: 
    13381373            raise AttributeInterfaceConfigError('No SQL query set for ' 
Note: See TracChangeset for help on using the changeset viewer.