Changeset 4070 for TI12-security/trunk


Ignore:
Timestamp:
25/07/08 17:09:56 (11 years ago)
Author:
pjkersha
Message:

Updated to AttributeAssertion?._createXML. All of the rest of the class needs refactoring from AttCert? original

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/saml/__init__.py

    r4059 r4070  
    2929    
    3030# XML signature module based on M2Crypto, ZSI Canonicalization and DOM 
    31 from ndg.security.common.XMLSec import XMLSecDoc, InvalidSignature, getParentNode 
     31from ndg.security.common.xmlsec.etree import XMLSecDoc, InvalidSignature 
    3232 
    3333#_____________________________________________________________________________ 
     
    8080#_____________________________________________________________________________ 
    8181class AttributeAssertion(dict, XMLSecDoc): 
    82     """NDG SAML 1.1 Attribute Assertion 
     82    """NDG SAML 1.1 Attribute Assertion for use with NERC DataGrid 
    8383     
    8484    @type __validProvenanceSettings: tuple 
     
    9494    # certificate 
    9595    __validProvenanceSettings = ('original', 'mapped') 
    96     namespace = "urn:ndg:security:attributeCertificate" 
     96     
     97    ns = "urn:oasis:names:tc:SAML:1.0:assertion" 
     98    nsPfx = "saml" 
     99    issuer = 'http://badc.nerc.ac.uk' 
     100    attributeName = "urn:mace:dir:attribute-def:eduPersonAffiliation" 
     101    attributeNS = "urn:mace:shibboleth:1.0:attributeNamespace:uri" 
    97102 
    98103    #_________________________________________________________________________     
     
    148153        self.__dtNotAfter = None 
    149154 
     155        self._createXML() 
     156         
    150157 
    151158    #_________________________________________________________________________     
     
    159166        """Override XMLSec.XMLSecDoc equivalent""" 
    160167        return self.toString() 
    161      
    162      
    163     #_________________________________________________________________________ 
    164     def toString(self, **kw): 
    165         """Return certificate file content as a string 
    166          
    167         @param **kw: keywords to XMLSec.XMLSecDoc.toString() 
    168         @rtype: string 
    169         @return: content of document""" 
    170  
    171         # If doc hasn't been parsed by parent (ie. not signed) return elements 
    172         # set so far using createXML method 
    173         return super(AttributeAssertion, self).toString(**kw) or self.createXML() 
    174  
     168      
    175169                 
    176170    #_________________________________________________________________________     
     
    414408            raise AttributeError("issuerName must be a string") 
    415409         
    416         self.__dat['issuerName'] = issuerName 
     410        self._rootElem.set('Issuer', issuerName) 
    417411     
    418412    #_________________________________________________________________________     
     
    420414        """@rtype: string 
    421415        @return: the name of the issuer""" 
    422         return self.__dat['issuerName'] 
     416        return self._rootElem.get('Issuer') 
    423417 
    424418    issuerName = property(fget=__getIssuerName,  
     
    634628        if rtnRootElem: 
    635629            return rootElem 
    636  
    637          
    638     #_________________________________________________________________________     
    639     def read(self, filePath=None, **xmlSecDocKw): 
    640         """Read an Attribute Assertion from file 
    641  
    642         @param filePath:   file to be read, if omitted XMLSecDoc.__filePath  
    643         member variable is used instead""" 
    644  
    645         if filePath: 
    646             self.filePath = filePath 
    647  
    648         try:     
    649             tree = ElementTree.parse(self.filePath) 
    650             rootElem = tree.getroot() 
    651         except Exception, e: 
    652             raise AttributeAssertionError("Attribute Assertion: %s" % e) 
    653          
    654         # Call generic ElementTree parser 
    655         self.__parse(rootElem) 
    656  
    657         # Call base class read method to initialise libxml2 objects for 
    658         # signature validation 
    659         try: 
    660             XMLSecDoc.read(self, **xmlSecDocKw) 
    661  
    662         except Exception, e: 
    663             raise AttributeAssertionError("Attribute Assertion: %s" % e) 
    664630 
    665631         
     
    757723 
    758724    #_________________________________________________________________________     
    759     def createXML(self): 
     725    def _createXML(self): 
    760726        """Create XML for Attribute Assertion from current data settings and 
    761727        return as a string.  The XML created is MINUS the digital signature. 
     
    769735        # Nb. 
    770736        # * this method is used by AttributeAssertion.read() 
    771         # * Signing by Attribute Authority is separate - see AttributeAssertion.sign() 
     737        # * Signing by Attribute Authority is separate - see  
     738        # AttributeAssertion.sign() 
    772739         
    773740 
     
    775742        if not self.isValidProvenance(): 
    776743            raise AttributeAssertionError("Provenance must be set to \"" + \ 
    777                 "\" or \"".join(AttributeAssertion.__validProvenanceSettings) + "\"") 
    778  
    779          
    780         # Create string of all XML content         
    781         xmlTxt = '<attributeCertificate targetNamespace="%s">' % \ 
    782                                          AttributeAssertion.namespace + \ 
    783 """ 
    784     <acInfo> 
    785         <version>""" + self.__dat['version'] + """</version> 
    786         <holder>""" + self.__dat['holder'] + """</holder> 
    787         <issuer>""" + self.__dat['issuer'] + """</issuer> 
    788         <issuerName>""" + self.__dat['issuerName'] + """</issuerName> 
    789         <issuerSerialNumber>""" + str(self.__dat['issuerSerialNumber']) +\ 
    790             """</issuerSerialNumber>  
    791         <userId>""" + self.__dat['userId'] + """</userId> 
    792     <validity> 
    793           <notBefore>""" + self.__dat['validity']['notBefore'] + \ 
    794           """</notBefore>  
    795         <notAfter>""" + self.__dat['validity']['notAfter'] + \ 
    796         """</notAfter>  
    797     </validity> 
    798     <attributes> 
    799         <roleSet> 
    800             """ + "".join([\ 
    801 """    <role> 
    802                 <name>""" + i['role']['name'] + """</name> 
    803         </role> 
    804         """ for i in self.__dat['attributes']['roleSet']]) + \ 
    805         """</roleSet> 
    806     </attributes> 
    807     <provenance>""" + self.__dat['provenance'] + """</provenance>  
    808     </acInfo> 
    809 </attributeCertificate>""" 
    810  
    811         # Return XML file content as a string 
    812         return xmlTxt 
     744                "\" or \"".join(AttributeAssertion.__validProvenanceSettings)+\ 
     745                "\"") 
     746 
     747         
     748        self._rootElem = ElementTree.Element("{%s}Assertion" %  
     749                                             AttributeAssertion.ns) 
     750        self._rootETree = ElementTree.ElementTree(element=self._rootElem) 
     751         
     752        self._rootElem.set('xmlns:%s' % AttributeAssertion.nsPfx,  
     753                           AttributeAssertion.ns) 
     754        self._rootElem.set('MajorVersion', '1') 
     755        self._rootElem.set('MinorVersion', '1') 
     756        self._rootElem.set('Issuer', self.issuerName) 
     757     
     758        conditionsElem = ElementTree.SubElement(self._rootElem, 
     759                                                '{%s}Conditions' % \ 
     760                                                AttributeAssertion.ns)     
     761        conditionsElem.set('NotBefore', 'x') 
     762        conditionsElem.set('NotAfter', 'y') 
     763         
     764        attributeStatementElem = ElementTree.SubElement(self._rootElem, 
     765                                                '{%s}AttributeStatement' % \ 
     766                                                AttributeAssertion.ns) 
     767         
     768        subjectElem = ElementTree.SubElement(attributeStatementElem, 
     769                                             '{%s}Subject' % \ 
     770                                             AttributeAssertion.ns) 
     771         
     772        attributeElem = ElementTree.SubElement(attributeStatementElem, 
     773                                               '{%s}Attribute' % \ 
     774                                               AttributeAssertion.ns) 
     775     
     776        attributeElem.set('AttributeName', 
     777                          "urn:mace:dir:attribute-def:eduPersonAffiliation") 
     778        attributeElem.set('AttributeNamespace', 
     779                          "urn:mace:shibboleth:1.0:attributeNamespace:uri") 
     780         
     781        for val in ['member', 'student']: 
     782           attributeValElem = ElementTree.SubElement(attributeElem, 
     783                                                     '{%s}AttributeValue' % \ 
     784                                                     AttributeAssertion.ns) 
     785           attributeValElem.text = val 
    813786 
    814787 
     
    820793        XMLSecDoc.applyEnvelopedSignature() 
    821794        '''        
    822         self.parse(self.createXML()) 
     795        self.parse(self._createXML()) 
    823796        super(AttributeAssertion, self).applyEnvelopedSignature(**xmlSecDocKw) 
    824797 
     
    11291102    conditionsElem.set('NotAfter', 'y') 
    11301103     
    1131     authNStatementElem = ElementTree.SubElement(assertionElem, 
    1132                                                 '{%s}AuthenticationStatement'%\ 
    1133                                                 ns) 
    1134     authNStatementElem.set('AuthenticationMethod', "...") 
    1135     authNStatementElem.set('AuthenticationInstant', "...") 
    1136      
    1137     subjectElem = ElementTree.SubElement(authNStatementElem,'{%s}Subject' % ns) 
    1138      
    11391104    attributeStatementElem = ElementTree.SubElement(assertionElem, 
    11401105                                                    '{%s}AttributeStatement' %\ 
     
    11681133 
    11691134if __name__ == "__main__": 
    1170     print create() 
     1135    import pdb;pdb.set_trace() 
     1136    attrAss = AttributeAssertion() 
     1137    attrAss.issuerName = "http://badc.nerc.ac.uk" 
     1138    print attrAss.issuerName 
     1139    print attrAss 
Note: See TracChangeset for help on using the changeset viewer.