Changeset 5597


Ignore:
Timestamp:
11/08/09 12:30:15 (10 years ago)
Author:
pjkersha
Message:

Refactored SAML package structure into saml2, core and common sub-packages

Location:
TI12-security/trunk/python/ndg.security.saml/saml
Files:
6 added
4 edited

Legend:

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

    r5596 r5597  
    3838# independent 
    3939from saml.utils import TypedList 
    40 from saml.xml import QName, SAMLConstants, XMLConstants 
    41  
    42        
    43 class SAMLObject(object): 
    44     """Base class for all SAML types""" 
    45     @classmethod 
    46     def parse(cls, xmlObject): 
    47         raise NotImplementedError() 
    48      
    49     @classmethod 
    50     def create(cls, samlObject): 
    51         raise NotImplementedError() 
    52      
    53  
    54 class SAMLVersion(SAMLObject): 
    55     """Version helper class""" 
    56     VERSION_10 = (1, 0) 
    57     VERSION_11 = (1, 1) 
    58     VERSION_20 = (2, 0) 
    59     KNOWN_VERSIONS = (VERSION_10, VERSION_11, VERSION_20) 
    60      
    61     def __init__(self, version): 
    62         if isinstance(version, basestring): 
    63             self.__version = SAMLVersion.valueOf(version) 
    64         elif isinstance(version, (tuple, list)): 
    65             self.__version = tuple(version) 
    66         else: 
    67             raise TypeError("Expecting string, tuple or list type for SAML " 
    68                             "version initialiser; got %r" % version) 
    69      
    70     def __str__(self): 
    71         return ".".join([str(i) for i in self.__version]) 
    72      
    73     def __eq__(self, version): 
    74         """Test for equality against an input version string, tuple or list""" 
    75                  
    76         if isinstance(version, basestring): 
    77             return self.__version == SAMLVersion.valueOf(version) 
    78         elif isinstance(version, (tuple, list)): 
    79             return self.__version == tuple(version) 
    80         else: 
    81             raise TypeError("Expecting string, tuple or list type for SAML " 
    82                             "version comparison; got %r" % version) 
    83              
    84     def __ne__(self, version): 
    85         return self.__eq__(version) 
    86      
    87     @staticmethod 
    88     def valueOf(version): 
    89         """Parse input string into version tuple 
    90         @type version: version 
    91         @param version: SAML version 
    92         @rtype: tuple 
    93         @return: SAML version tuple""" 
    94         return tuple(version.split(".")) 
    95  
    96  
    97 class Conditions(SAMLObject):  
    98     '''SAML 2.0 Core Conditions.''' 
    99      
    100     # Element local name. 
    101     DEFAULT_ELEMENT_LOCAL_NAME = "Conditions" 
    102  
    103     # Default element name. 
    104     DEFAULT_ELEMENT_NAME = QName(SAMLConstants.SAML20_NS,  
    105                                  DEFAULT_ELEMENT_LOCAL_NAME, 
    106                                  SAMLConstants.SAML20_PREFIX) 
    107  
    108     # Local name of the XSI type. 
    109     TYPE_LOCAL_NAME = "ConditionsType" 
    110  
    111     # QName of the XSI type. 
    112     TYPE_NAME = QName(SAMLConstants.SAML20_NS,  
    113                       TYPE_LOCAL_NAME, 
    114                       SAMLConstants.SAML20_PREFIX) 
    115  
    116     # NotBefore attribute name. 
    117     NOT_BEFORE_ATTRIB_NAME = "NotBefore" 
    118  
    119     # NotOnOrAfter attribute name. 
    120     NOT_ON_OR_AFTER_ATTRIB_NAME = "NotOnOrAfter" 
    121  
    122     def __init__(self): 
    123          
    124         # A Condition. 
    125         self.__conditions = [] 
    126      
    127         # Not Before conditions. 
    128         self.__notBefore = None 
    129      
    130         # Not On Or After conditions. 
    131         self.__notOnOrAfter = None 
    132  
    133     def _getNotBefore(self): 
    134         '''Get the date/time before which the assertion is invalid. 
    135          
    136         @return the date/time before which the assertion is invalid''' 
    137         return self.__notBefore 
    138      
    139     def _setNotBefore(self, value): 
    140         '''Sets the date/time before which the assertion is invalid. 
    141          
    142         @param newNotBefore the date/time before which the assertion is invalid 
    143         ''' 
    144         if not isinstance(value, datetime): 
    145             raise TypeError('Expecting "datetime" type for "notBefore", ' 
    146                             'got %r' % type(value)) 
    147         self.__notBefore = value 
    148  
    149     def _getNotOnOrAfter(self): 
    150         '''Gets the date/time on, or after, which the assertion is invalid. 
    151          
    152         @return the date/time on, or after, which the assertion is invalid' 
    153         ''' 
    154         return self.__notBefore 
    155      
    156     def _setNotOnOrAfter(self, value): 
    157         '''Sets the date/time on, or after, which the assertion is invalid. 
    158          
    159         @param newNotOnOrAfter the date/time on, or after, which the assertion  
    160         is invalid 
    161         ''' 
    162         if not isinstance(notOnOrAfter, datetime): 
    163             raise TypeError('Expecting "datetime" type for "notOnOrAfter", ' 
    164                             'got %r' % type(value)) 
    165         self.__notOnOrAfter = notOnOrAfter   
    166  
    167     def _getConditions(self): 
    168         '''Gets all the conditions on the assertion. 
    169          
    170         @return all the conditions on the assertion 
    171         ''' 
    172         return self.__conditions 
    173      
    174     conditions = property(fget=_getConditions, 
    175                           doc="List of conditions") 
    176      
    177     def _getAudienceRestrictions(self): 
    178         '''Gets the audience restriction conditions for the assertion. 
    179          
    180         @return the audience restriction conditions for the assertion 
    181         ''' 
    182         raise NotImplementedError() 
    183  
    184     def _getOneTimeUse(self): 
    185         '''Gets the OneTimeUse condition for the assertion. 
    186          
    187         @return the OneTimeUse condition for the assertion 
    188         ''' 
    189         raise NotImplementedError() 
    190  
    191     def _getProxyRestriction(self):     
    192         '''Gets the ProxyRestriction condition for the assertion. 
    193          
    194         @return the ProxyRestriction condition for the assertion 
    195         ''' 
    196         raise NotImplementedError() 
    197  
    198  
    199 class Assertion(SAMLObject): 
    200     """SAML 2.0 Attribute Assertion for use with NERC DataGrid     
    201     """     
    202     ns = "urn:oasis:names:tc:SAML:1.0:assertion" 
    203     nsPfx = "saml" 
    204     issuer = 'http:#badc.nerc.ac.uk' 
    205     attributeName = "urn:mace:dir:attribute-def:eduPersonAffiliation" 
    206     attributeNS = "urn:mace:shibboleth:1.0:attributeNamespace:uri" 
    207  
    208     # Element local name. 
    209     DEFAULT_ELEMENT_LOCAL_NAME = "Assertion" 
    210  
    211     # Default element name. 
    212     DEFAULT_ELEMENT_NAME = QName(SAMLConstants.SAML20_NS,  
    213                                  DEFAULT_ELEMENT_LOCAL_NAME, 
    214                                  SAMLConstants.SAML20_PREFIX) 
    215  
    216     # Local name of the XSI type. 
    217     TYPE_LOCAL_NAME = "AssertionType" 
    218  
    219     # QName of the XSI type. 
    220     TYPE_NAME = QName(SAMLConstants.SAML20_NS, TYPE_LOCAL_NAME, 
    221                       SAMLConstants.SAML20_PREFIX) 
    222  
    223     # Version attribute name. 
    224     VERSION_ATTRIB_NAME = "Version" 
    225  
    226     # IssueInstant attribute name. 
    227     ISSUE_INSTANT_ATTRIB_NAME = "IssueInstant" 
    228  
    229     # ID attribute name. 
    230     ID_ATTRIB_NAME = "ID" 
    231  
    232     def __init__(self): 
    233         # Base class initialisation 
    234         super(Assertion, self).__init__() 
    235          
    236         self.__version = None 
    237         self.__issueInstant = None 
    238         self.__id = None 
    239         self.__issuer = None 
    240         self.__subject = None 
    241          
    242         self.__conditions = None 
    243         self.__advice = None 
    244         self.__statements = TypedList(Statement) 
    245          
    246         # TODO: Implement AuthnStatement and AuthzDecisionStatement classes 
    247         self.__authnStatements = [] 
    248         self.__authzDecisionStatements = [] 
    249         self.__attributeStatements = TypedList(AttributeStatement) 
    250          
    251     def _get_version(self): 
    252         '''@return the SAML Version of this assertion. 
    253         ''' 
    254         return self.__version 
    255      
    256     def _set_version(self, version): 
    257         '''@param version the SAML Version of this assertion 
    258         ''' 
    259         if not isinstance(version, SAMLVersion): 
    260             raise TypeError("Expecting SAMLVersion type got: %r" %  
    261                             version.__class__) 
    262          
    263         self.__version = version 
    264          
    265     version = property(fget=_get_version, 
    266                        fset=_set_version, 
    267                        doc="SAML Version of the assertion") 
    268  
    269     def _get_issueInstant(self): 
    270         '''Gets the issue instance of this assertion. 
    271          
    272         @return the issue instance of this assertion''' 
    273         return self.__issueInstant 
    274      
    275     def _set_issueInstant(self, issueInstant): 
    276         '''Sets the issue instance of this assertion. 
    277          
    278         @param newIssueInstance the issue instance of this assertion 
    279         ''' 
    280         if not isinstance(issueInstant, datetime): 
    281             raise TypeError('Expecting "datetime" type for "issueInstant", ' 
    282                             'got %r' % issueInstant.__class__) 
    283              
    284         self.__issueInstant = issueInstant 
    285          
    286     issueInstant = property(fget=_get_issueInstant,  
    287                             fset=_set_issueInstant, 
    288                             doc="Issue instant of the assertion") 
    289  
    290     def _get_id(self): 
    291         '''Sets the ID of this assertion. 
    292          
    293         @return the ID of this assertion 
    294         ''' 
    295         return self.__id 
    296      
    297     def _set_id(self, _id): 
    298         '''Sets the ID of this assertion. 
    299          
    300         @param newID the ID of this assertion 
    301         ''' 
    302         if not isinstance(_id, basestring): 
    303             raise TypeError('Expecting basestring derived type for "id", got ' 
    304                             '%r' % _id.__class__) 
    305         self.__id = _id 
    306          
    307     id = property(fget=_get_id, fset=_set_id, doc="ID of assertion") 
    308      
    309     def _set_issuer(self, issuer): 
    310         """Set issuer""" 
    311         if not isinstance(issuer, Issuer): 
    312             raise TypeError("issuer must be %r, got %r" % (Issuer,  
    313                                                            type(issuer))) 
    314         self.__issuer = issuer 
    315      
    316     def _get_issuer(self): 
    317         """Get the issuer name """ 
    318         return self.__issuer 
    319  
    320     issuer = property(fget=_get_issuer,  
    321                       fset=_set_issuer, 
    322                       doc="Issuer of assertion") 
    323      
    324     def _set_subject(self, subject): 
    325         """Set subject string.""" 
    326         if not isinstance(subject, Subject): 
    327             raise TypeError("subject must be %r, got %r" % (Subject,  
    328                                                             type(subject))) 
    329  
    330         self.__subject = subject 
    331      
    332     def _get_subject(self): 
    333         """Get subject string.""" 
    334         return self.__subject 
    335  
    336     subject = property(fget=_get_subject, 
    337                        fset=_set_subject,  
    338                        doc="Attribute Assertion subject") 
    339      
    340     def _get_conditions(self): 
    341         """Get conditions string.""" 
    342         return self.__conditions 
    343      
    344     def _set_conditions(self, value): 
    345         """Get conditions string.""" 
    346         if not isinstance(value, Conditions): 
    347             raise TypeError("Conditions must be %r, got %r" % (Conditions,  
    348                                                             type(conditions))) 
    349  
    350         self.__conditions = value 
    351  
    352     conditions = property(fget=_get_conditions, 
    353                           fset=_set_conditions, 
    354                           doc="Attribute Assertion conditions") 
    355      
    356     def _set_advice(self, advice): 
    357         """Set advice string.""" 
    358         if not isinstance(advice, basestring): 
    359             raise TypeError("advice must be a string") 
    360  
    361         self.__advice = advice 
    362      
    363     def _get_advice(self): 
    364         """Get advice string.""" 
    365         return self.__advice 
    366  
    367     advice = property(fget=_get_advice, 
    368                       fset=_set_advice,  
    369                       doc="Attribute Assertion advice") 
    370      
    371     def _get_statements(self): 
    372         """Get statements string.""" 
    373         return self.__statements 
    374  
    375     statements = property(fget=_get_statements, 
    376                           doc="Attribute Assertion statements") 
    377      
    378     def _get_authnStatements(self): 
    379         """Get authnStatements string.""" 
    380         return self.__authnStatements 
    381  
    382     authnStatements = property(fget=_get_authnStatements, 
    383                                doc="Attribute Assertion authentication " 
    384                                    "statements") 
    385      
    386     def _get_authzDecisionStatements(self): 
    387         """Get authorisation decision statements.""" 
    388         return self.__authzDecisionStatements 
    389  
    390     authzDecisionStatements = property(fget=_get_authzDecisionStatements, 
    391                                        doc="Attribute Assertion authorisation " 
    392                                            "decision statements") 
    393      
    394     def _get_attributeStatements(self): 
    395         """Get attributeStatements string.""" 
    396         return self.__attributeStatements 
    397  
    398     attributeStatements = property(fget=_get_attributeStatements, 
    399                                    doc="Attribute Assertion attribute " 
    400                                        "statements") 
    401  
    402  
    403 class Attribute(SAMLObject): 
    404     '''SAML 2.0 Core Attribute.''' 
    405      
    406     # Local name of the Attribute element.  
    407     DEFAULT_ELEMENT_LOCAL_NAME = "Attribute" 
    408  
    409     # Default element name.  
    410     DEFAULT_ELEMENT_NAME = QName(SAMLConstants.SAML20_NS,  
    411                                  DEFAULT_ELEMENT_LOCAL_NAME, 
    412                                  SAMLConstants.SAML20_PREFIX) 
    413  
    414     # Local name of the XSI type.  
    415     TYPE_LOCAL_NAME = "AttributeType" 
    416  
    417     # QName of the XSI type.  
    418     TYPE_NAME = QName(SAMLConstants.SAML20_NS,  
    419                       TYPE_LOCAL_NAME, 
    420                       SAMLConstants.SAML20_PREFIX) 
    421  
    422     # Name of the Name attribute.  
    423     NAME_ATTRIB_NAME = "Name" 
    424  
    425     # Name for the NameFormat attribute.  
    426     NAME_FORMAT_ATTRIB_NAME = "NameFormat" 
    427  
    428     # Name of the FriendlyName attribute.  
    429     FRIENDLY_NAME_ATTRIB_NAME = "FriendlyName" 
    430  
    431     # Unspecified attribute format ID.  
    432     UNSPECIFIED = "urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified" 
    433  
    434     # URI reference attribute format ID.  
    435     URI_REFERENCE = "urn:oasis:names:tc:SAML:2.0:attrname-format:uri" 
    436  
    437     # Basic attribute format ID.  
    438     BASIC = "urn:oasis:names:tc:SAML:2.0:attrname-format:basic" 
    439  
    440     def __init__(self): 
    441         self._name = None 
    442         self._nameFormat = None 
    443         self._friendlyName = None 
    444         self._attributeValues = [] 
    445  
    446     def _get_name(self): 
    447         return self._name 
    448      
    449     def _set_name(self, name): 
    450         if not isinstance(name, basestring): 
    451             raise TypeError("Expecting basestring type for name, got %r"% name) 
    452          
    453         self._name = name 
    454          
    455     name = property(fget=_get_name, 
    456                     fset=_set_name, 
    457                     doc="name of this attribute") 
    458      
    459     def _get_nameFormat(self): 
    460         return self._nameFormat 
    461      
    462     def _set_nameFormat(self, nameFormat): 
    463         if not isinstance(nameFormat, basestring): 
    464             raise TypeError("Expecting basestring type for nameFormat, got %r" 
    465                             % nameFormat) 
    466              
    467         self._nameFormat = nameFormat 
    468          
    469     nameFormat = property(fget=_get_nameFormat, 
    470                           fset=_set_nameFormat, 
    471                           doc="Get the name format of this attribute.") 
    472      
    473     def _get_friendlyName(self): 
    474         return self._friendlyName 
    475      
    476     def _set_friendlyName(self, friendlyName): 
    477         if not isinstance(friendlyName, basestring): 
    478             raise TypeError("Expecting basestring type for friendlyName, got " 
    479                             "%r" % friendlyName) 
    480              
    481         self._friendlyName = friendlyName 
    482          
    483     friendlyName = property(fget=_get_friendlyName, 
    484                             fset=_set_friendlyName, 
    485                             doc="the friendly name of this attribute.") 
    486      
    487     def _get_attributeValues(self): 
    488         return self._attributeValues 
    489      
    490     def _set_attributeValues(self, attributeValues): 
    491         if not isinstance(attributeValues, (list, tuple)): 
    492             raise TypeError("Expecting basestring type for attributeValues, " 
    493                             "got %r" % attributeValues) 
    494              
    495         self._attributeValues = attributeValues 
    496          
    497     attributeValues = property(fget=_get_attributeValues, 
    498                                fset=_set_attributeValues, 
    499                                doc="the list of attribute values for this " 
    500                                "attribute.") 
    501  
    502 class AttributeValue(SAMLObject): 
    503  
    504     # Element name, no namespace 
    505     DEFAULT_ELEMENT_LOCAL_NAME = "AttributeValue" 
    506  
    507     # Default element name 
    508     DEFAULT_ELEMENT_NAME = QName(SAMLConstants.SAML20_NS,  
    509                                  DEFAULT_ELEMENT_LOCAL_NAME, 
    510                                  SAMLConstants.SAML20_PREFIX) 
     40from saml.xml import QName 
     41from saml.common.xml import SAMLConstants, XMLConstants 
     42from saml.saml2.core import AttributeValue 
    51143     
    51244     
     
    53567 
    53668    value = property(fget=_getValue, fset=_setValue, doc="string value")   
    537     
    538 class Statement(SAMLObject): 
    539     pass 
    540  
    541 class AttributeStatement(Statement): 
    542     '''SAML 2.0 Core AttributeStatement''' 
    543  
    544     def __init__(self): 
    545         self.__attributes = TypedList(Attribute) 
    546         self.__encryptedAttributes = TypedList(Attribute) 
    547  
    548     # Element local name 
    549     DEFAULT_ELEMENT_LOCAL_NAME = "AttributeStatement" 
    550      
    551     # Default element name. 
    552     DEFAULT_ELEMENT_NAME = QName(SAMLConstants.SAML20_NS,  
    553                                  DEFAULT_ELEMENT_LOCAL_NAME,  
    554                                  SAMLConstants.SAML20_PREFIX) 
    555      
    556     # Local name of the XSI type.  
    557     TYPE_LOCAL_NAME = "AttributeStatementType"  
    558          
    559     # QName of the XSI type. 
    560     TYPE_NAME = QName(SAMLConstants.SAML20_NS,  
    561                       TYPE_LOCAL_NAME,  
    562                       SAMLConstants.SAML20_PREFIX) 
    563  
    564     def _get_attributes(self): 
    565         '''@return the attributes expressed in this statement 
    566         ''' 
    567         return self.__attributes 
    568  
    569     attributes = property(fget=_get_attributes) 
    570      
    571     def _get_encryptedAttributes(self): 
    572        '''@return the encrypted attribtues expressed in this statement 
    573        ''' 
    574        return self.__encryptedAttributes 
    575     
    576     encryptedAttributes = property(fget=_get_encryptedAttributes) 
    57769     
    57870 
     
    666158        # no children 
    667159        return None 
    668  
    669  
    670 class AbstractNameIDType(SAMLObject): 
    671     '''Abstract implementation of NameIDType''' 
    672  
    673     # SPNameQualifier attribute name. 
    674     SP_NAME_QUALIFIER_ATTRIB_NAME = "SPNameQualifier" 
    675  
    676     # Format attribute name. 
    677     FORMAT_ATTRIB_NAME = "Format" 
    678  
    679     # SPProviderID attribute name. 
    680     SPPROVIDED_ID_ATTRIB_NAME = "SPProvidedID" 
    681  
    682     # URI for unspecified name format. 
    683     UNSPECIFIED = "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" 
    684  
    685     # URI for email name format. 
    686     EMAIL = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" 
    687  
    688     # URI for X509 subject name format. 
    689     X509_SUBJECT = "urn:oasis:names:tc:SAML:1.1:nameid-format:x509SubjectName" 
    690  
    691     # URI for windows domain qualified name name format. 
    692     WIN_DOMAIN_QUALIFIED = \ 
    693         "urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName" 
    694  
    695     # URI for kerberos name format. 
    696     KERBEROS = "urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos" 
    697  
    698     # URI for SAML entity name format. 
    699     ENTITY = "urn:oasis:names:tc:SAML:2.0:nameid-format:entity" 
    700  
    701     # URI for persistent name format. 
    702     PERSISTENT = "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" 
    703  
    704     # URI for transient name format. 
    705     TRANSIENT = "urn:oasis:names:tc:SAML:2.0:nameid-format:transient" 
    706  
    707     # Special URI used by NameIDPolicy to indicate a NameID should be encrypted 
    708     ENCRYPTED = "urn:oasis:names:tc:SAML:2.0:nameid-format:encrypted" 
    709      
    710     def __init__(self, namespaceURI, elementLocalName, namespacePrefix):  
    711         '''@param namespaceURI the namespace the element is in 
    712         @param elementLocalName the local name of the XML element this Object  
    713         represents 
    714         @param namespacePrefix the prefix for the given namespace 
    715         ''' 
    716         self.__qname = QName(namespaceURI, elementLocalName, namespacePrefix) 
    717      
    718         # Name of the Name ID. 
    719         self.__name = None 
    720          
    721         # Name Qualifier of the Name ID. 
    722         self.__nameQualifier = None 
    723      
    724         # SP Name Qualifier of the Name ID. 
    725         self.__spNameQualifier = None 
    726      
    727         # Format of the Name ID. 
    728         self.__format = None 
    729      
    730         # SP ProvidedID of the NameID. 
    731         self.__spProvidedID = None 
    732  
    733         self.__value = None 
    734          
    735     def _getQName(self): 
    736         return self.__qname 
    737          
    738     def _setQName(self, value): 
    739         if not isinstance(value, QName): 
    740             raise TypeError("\"qname\" must be a %r derived type, " 
    741                             "got %r" % (QName, type(value))) 
    742              
    743         self.__qname = value 
    744  
    745     qname = property(fget=_getQName, fset=_setQName, doc="qualified name") 
    746               
    747     def _getValue(self): 
    748         return self.__value 
    749          
    750     def _setValue(self, value): 
    751         if not isinstance(value, basestring): 
    752             raise TypeError("\"value\" must be a basestring derived type, " 
    753                             "got %r" % value.__class__) 
    754              
    755         self.__value = value 
    756  
    757     value = property(fget=_getValue, fset=_setValue, doc="string value")   
    758      
    759     def _getNameQualifier(self):  
    760         return self.__nameQualifier 
    761      
    762     def _setNameQualifier(self, value):  
    763         self.__nameQualifier = value 
    764  
    765     nameQualifier = property(fget=_getNameQualifier,  
    766                              fset=_setNameQualifier,  
    767                              doc="Name qualifier")     
    768  
    769     def _getSPNameQualifier(self):  
    770         return self.__spNameQualifier 
    771      
    772     def _setSPNameQualifier(self, value):  
    773         self.__spNameQualifier = value 
    774  
    775     spNameQualifier = property(fget=_getSPNameQualifier,  
    776                                fset=_setSPNameQualifier,  
    777                                doc="SP Name qualifier")     
    778      
    779     def _getFormat(self): 
    780         return self.__format 
    781          
    782     def _setFormat(self, format): 
    783         if not isinstance(format, basestring): 
    784             raise TypeError("\"format\" must be a basestring derived type, " 
    785                             "got %r" % format.__class__) 
    786              
    787         self.__format = format 
    788  
    789     format = property(fget=_getFormat, fset=_setFormat, doc="Name format")   
    790      
    791     def _getSPProvidedID(self):  
    792         return self.__spProvidedID 
    793      
    794     def _setSPProvidedID(self, value):  
    795         self.__spProvidedID = value 
    796  
    797     spProvidedID = property(fget=_getSPProvidedID, fset=_setSPProvidedID,  
    798                             doc="SP Provided Identifier")   
    799      
    800     def getOrderedChildren(self):  
    801         raise NotImplementedError() 
    802  
    803     
    804 class Issuer(AbstractNameIDType): 
    805  
    806     # Element local name.  
    807     DEFAULT_ELEMENT_LOCAL_NAME = "Issuer" 
    808  
    809     # Default element name.  
    810     DEFAULT_ELEMENT_NAME = QName(SAMLConstants.SAML20_NS,  
    811                                  DEFAULT_ELEMENT_LOCAL_NAME, 
    812                                  SAMLConstants.SAML20_PREFIX) 
    813  
    814     # Local name of the XSI type.  
    815     TYPE_LOCAL_NAME = "IssuerType" 
    816  
    817     # QName of the XSI type. 
    818     TYPE_NAME = QName(SAMLConstants.SAML20_NS,  
    819                       TYPE_LOCAL_NAME, 
    820                       SAMLConstants.SAML20_PREFIX)  
    821      
    822     def __init__(self,  
    823                  namespaceURI=SAMLConstants.SAML20_NS,  
    824                  elementLocalName=DEFAULT_ELEMENT_LOCAL_NAME,  
    825                  namespacePrefix=SAMLConstants.SAML20_PREFIX): 
    826         super(Issuer, self).__init__(namespaceURI=namespaceURI, 
    827                                      elementLocalName=elementLocalName, 
    828                                      namespacePrefix=namespacePrefix) 
    829  
    830       
    831 class NameID(AbstractNameIDType): 
    832     '''SAML 2.0 Core NameID''' 
    833     # Element local name.  
    834     DEFAULT_ELEMENT_LOCAL_NAME = "NameID" 
    835  
    836     # Default element name.  
    837     DEFAULT_ELEMENT_NAME = QName(SAMLConstants.SAML20_NS,  
    838                                  DEFAULT_ELEMENT_LOCAL_NAME, 
    839                                  SAMLConstants.SAML20_PREFIX) 
    840  
    841     # Local name of the XSI type.  
    842     TYPE_LOCAL_NAME = "NameIDType" 
    843  
    844     # QName of the XSI type.  
    845     TYPE_NAME = QName(SAMLConstants.SAML20_NS,  
    846                       TYPE_LOCAL_NAME, 
    847                       SAMLConstants.SAML20_PREFIX) 
    848      
    849     def __init__(self,  
    850                  namespaceURI=SAMLConstants.SAML20_NS,  
    851                  elementLocalName=DEFAULT_ELEMENT_LOCAL_NAME,  
    852                  namespacePrefix=SAMLConstants.SAML20_PREFIX): 
    853         super(NameID, self).__init__(namespaceURI=namespaceURI, 
    854                                      elementLocalName=elementLocalName, 
    855                                      namespacePrefix=namespacePrefix) 
    856          
    857      
    858 class Subject(SAMLObject): 
    859     '''Concrete implementation of @link org.opensaml.saml2.core.Subject.''' 
    860      
    861     # Element local name. 
    862     DEFAULT_ELEMENT_LOCAL_NAME = "Subject" 
    863  
    864     # Default element name. 
    865     DEFAULT_ELEMENT_NAME = QName(SAMLConstants.SAML20_NS,  
    866                                  DEFAULT_ELEMENT_LOCAL_NAME, 
    867                                  SAMLConstants.SAML20_PREFIX) 
    868  
    869     # Local name of the XSI type. 
    870     TYPE_LOCAL_NAME = "SubjectType" 
    871  
    872     # QName of the XSI type. 
    873     TYPE_NAME = QName(SAMLConstants.SAML20_NS,  
    874                       TYPE_LOCAL_NAME, 
    875                       SAMLConstants.SAML20_PREFIX) 
    876  
    877     def __init__(self,  
    878                  namespaceURI=SAMLConstants.SAML20_NS,  
    879                  elementLocalName=DEFAULT_ELEMENT_LOCAL_NAME,  
    880                  namespacePrefix=SAMLConstants.SAML20_PREFIX): 
    881         '''@param namespaceURI the namespace the element is in 
    882         @param elementLocalName the local name of the XML element this Object  
    883         represents 
    884         @param namespacePrefix the prefix for the given namespace 
    885         ''' 
    886         self.__qname = QName(namespaceURI,  
    887                              elementLocalName,  
    888                              namespacePrefix) 
    889          
    890         # BaseID child element. 
    891         self.__baseID = None 
    892      
    893         # NameID child element. 
    894         self.__nameID = None 
    895      
    896         # EncryptedID child element. 
    897         self.__encryptedID = None 
    898      
    899         # Subject Confirmations of the Subject. 
    900         self.__subjectConfirmations = [] 
    901      
    902     def _get_qname(self): 
    903         return self.__qname 
    904      
    905     qname = property(fget=_get_qname, doc="Qualified Name for Subject") 
    906      
    907     def _getBaseID(self):  
    908         return self.__baseID 
    909  
    910     def _setBaseID(self, value): 
    911         if not isinstance(value, basestring): 
    912             raise TypeError("Expecting %r type for \"baseID\" got %r" % 
    913                             (basestring, value.__class__)) 
    914         self.__baseID = value 
    915  
    916     baseID = property(fget=_getBaseID,  
    917                       fset=_setBaseID,  
    918                       doc="Base identifier") 
    919        
    920     def _getNameID(self): 
    921         return self.__nameID 
    922      
    923     def _setNameID(self, value): 
    924         if not isinstance(value, NameID): 
    925             raise TypeError("Expecting %r type for \"nameID\" got %r" % 
    926                             (NameID, type(value))) 
    927         self.__nameID = value 
    928  
    929     nameID = property(fget=_getNameID,  
    930                       fset=_setNameID,  
    931                       doc="Name identifier") 
    932      
    933     def _getEncryptedID(self): 
    934         return self.__encryptedID 
    935      
    936     def _setEncryptedID(self, value):  
    937         self.__encryptedID = value 
    938  
    939     encryptedID = property(fget=_getEncryptedID,  
    940                            fset=_setEncryptedID,  
    941                            doc="EncryptedID's Docstring")     
    942     def _getSubjectConfirmations(self):  
    943         return self.__subjectConfirmations 
    944  
    945     subjectConfirmations = property(fget=_getSubjectConfirmations,  
    946                                     doc="Subject Confirmations")     
    947     def getOrderedChildren(self):  
    948         children = [] 
    949  
    950         if self.baseID is not None: 
    951             children.append(self.baseID) 
    952          
    953         if self.nameID is not None:  
    954             children.append(self.nameID) 
    955          
    956         if self.encryptedID is not None:  
    957             children.append(self.encryptedID) 
    958          
    959         children += self.subjectConfirmations 
    960  
    961         return tuple(children) 
    962      
    963  
    964 class RequestAbstractType(SAMLObject):  
    965     '''SAML 2.0 Core RequestAbstractType''' 
    966      
    967     # Local name of the XSI type. 
    968     TYPE_LOCAL_NAME = "RequestAbstractType" 
    969  
    970     # QName of the XSI type. 
    971     TYPE_NAME = QName(SAMLConstants.SAML20P_NS,  
    972                       TYPE_LOCAL_NAME, 
    973                       SAMLConstants.SAML20P_PREFIX) 
    974  
    975     # ID attribute name. 
    976     ID_ATTRIB_NAME = "ID" 
    977  
    978     # Version attribute name. 
    979     VERSION_ATTRIB_NAME = "Version" 
    980  
    981     # IssueInstant attribute name. 
    982     ISSUE_INSTANT_ATTRIB_NAME = "IssueInstant" 
    983  
    984     # Destination attribute name. 
    985     DESTINATION_ATTRIB_NAME = "Destination" 
    986  
    987     # Consent attribute name. 
    988     CONSENT_ATTRIB_NAME = "Consent" 
    989  
    990     # Unspecified consent URI. 
    991     UNSPECIFIED_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:unspecified" 
    992  
    993     # Obtained consent URI. 
    994     OBTAINED_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:obtained" 
    995  
    996     # Prior consent URI. 
    997     PRIOR_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:prior" 
    998  
    999     # Implicit consent URI. 
    1000     IMPLICIT_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:implicit" 
    1001  
    1002     # Explicit consent URI. 
    1003     EXPLICIT_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:explicit" 
    1004  
    1005     # Unavailable consent URI. 
    1006     UNAVAILABLE_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:unavailable" 
    1007  
    1008     # Inapplicable consent URI. 
    1009     INAPPLICABLE_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:inapplicable"  
    1010  
    1011     def __init__(self): 
    1012         # SAML Version of the request.  
    1013         self.__version = None 
    1014      
    1015         # Unique identifier of the request.  
    1016         self.__id = None 
    1017      
    1018         # Date/time request was issued.  
    1019         self.__issueInstant = None 
    1020      
    1021         # URI of the request destination.  
    1022         self.__destination = None 
    1023      
    1024         # URI of the SAML user consent type.  
    1025         self.__consent = None 
    1026      
    1027         # URI of the SAML user consent type.  
    1028         self.__issuer = None 
    1029      
    1030         # Extensions child element.  
    1031         self.__extensions = None 
    1032          
    1033     def _get_version(self): 
    1034         '''@return the SAML Version of this assertion. 
    1035         ''' 
    1036         return self.__version 
    1037      
    1038     def _set_version(self, version): 
    1039         '''@param version the SAML Version of this assertion 
    1040         ''' 
    1041         if not isinstance(version, SAMLVersion): 
    1042             raise TypeError("Expecting SAMLVersion type got: %r" %  
    1043                             version.__class__) 
    1044          
    1045         self.__version = version 
    1046          
    1047     version = property(fget=_get_version, 
    1048                        fset=_set_version, 
    1049                        doc="SAML Version of the assertion") 
    1050  
    1051     def _get_issueInstant(self): 
    1052         '''Gets the date/time the request was issued 
    1053          
    1054         @return the issue instance of this request''' 
    1055         return self.__issueInstant 
    1056      
    1057     def _set_issueInstant(self, value): 
    1058         '''Sets the date/time the request was issued 
    1059          
    1060         @param value the issue instance of this request 
    1061         ''' 
    1062         if not isinstance(value, datetime): 
    1063             raise TypeError('Expecting "datetime" type for "issueInstant", ' 
    1064                             'got %r' % type(value)) 
    1065              
    1066         self.__issueInstant = value 
    1067          
    1068     issueInstant = property(fget=_get_issueInstant,  
    1069                             fset=_set_issueInstant, 
    1070                             doc="Issue instant of the request")  
    1071  
    1072     def _get_id(self): 
    1073         '''Sets the unique identifier for this request. 
    1074          
    1075         @return the ID of this request 
    1076         ''' 
    1077         return self.__id 
    1078      
    1079     def _set_id(self, value): 
    1080         '''Sets the unique identifier for this request 
    1081          
    1082         @param newID the ID of this assertion 
    1083         ''' 
    1084         if not isinstance(value, basestring): 
    1085             raise TypeError('Expecting basestring derived type for "id", got ' 
    1086                             '%r' % type(value)) 
    1087         self.__id = value 
    1088          
    1089     id = property(fget=_get_id, fset=_set_id, doc="ID of request") 
    1090  
    1091     def _get_destination(self): 
    1092         '''Gets the URI of the destination of the request. 
    1093          
    1094         @return the URI of the destination of the request 
    1095         ''' 
    1096         return self.__destination 
    1097      
    1098     def _set_destination(self, value): 
    1099         '''Sets the URI of the destination of the request. 
    1100          
    1101         @param newDestination the URI of the destination of the request''' 
    1102         if not isinstance(value, basestring): 
    1103             raise TypeError('Expecting basestring derived type for ' 
    1104                             '"destination", got %r' % type(value)) 
    1105         self.__destination = value 
    1106          
    1107     destination = property(fget=_get_destination,  
    1108                            fset=_set_destination, 
    1109                            doc="Destination of request") 
    1110       
    1111     def _get_consent(self): 
    1112         '''Gets the consent obtained from the principal for sending this  
    1113         request. 
    1114          
    1115         @return: the consent obtained from the principal for sending this  
    1116         request 
    1117         ''' 
    1118         return self.__consent 
    1119          
    1120     def _set_consent(self, value): 
    1121         '''Sets the consent obtained from the principal for sending this  
    1122         request. 
    1123          
    1124         @param value: the new consent obtained from the principal for  
    1125         sending this request 
    1126         '''  
    1127         if not isinstance(value, basestring): 
    1128             raise TypeError('Expecting basestring derived type for "consent", ' 
    1129                             'got %r' % type(value)) 
    1130         self.__consent = value 
    1131                
    1132     consent = property(fget=_get_consent,  
    1133                        fset=_set_consent, 
    1134                        doc="Consent for request") 
    1135     
    1136     def _set_issuer(self, issuer): 
    1137         """Set issuer of request""" 
    1138         if not isinstance(issuer, Issuer): 
    1139             raise TypeError('"issuer" must be a %r, got %r' % (Issuer,  
    1140                                                                type(issuer))) 
    1141          
    1142         self.__issuer = issuer 
    1143      
    1144     def _get_issuer(self): 
    1145         """Get the issuer name """ 
    1146         return self.__issuer 
    1147  
    1148     issuer = property(fget=_get_issuer,  
    1149                       fset=_set_issuer, 
    1150                       doc="Issuer of request") 
    1151   
    1152     def _get_extensions(self): 
    1153         '''Gets the Extensions of this request. 
    1154          
    1155         @return: the Status of this request 
    1156         ''' 
    1157         return self.__extensions 
    1158        
    1159     def _set_extensions(self, value): 
    1160         '''Sets the Extensions of this request. 
    1161          
    1162         @param value: the Extensions of this request 
    1163         ''' 
    1164         self.__extensions = value 
    1165          
    1166     extensions = property(fget=_get_extensions,  
    1167                           fset=_set_extensions, 
    1168                           doc="Request extensions") 
    1169  
    1170  
    1171 class StatusDetail(SAMLObject): 
    1172     '''Implementation of SAML 2.0 StatusDetail.''' 
    1173      
    1174     # Local Name of StatusDetail. 
    1175     DEFAULT_ELEMENT_LOCAL_NAME = "StatusDetail" 
    1176  
    1177     # Default element name. 
    1178     DEFAULT_ELEMENT_NAME = QName(SAMLConstants.SAML20P_NS,  
    1179                                  DEFAULT_ELEMENT_LOCAL_NAME, 
    1180                                  SAMLConstants.SAML20P_PREFIX) 
    1181  
    1182     # Local name of the XSI type. 
    1183     TYPE_LOCAL_NAME = "StatusDetailType" 
    1184  
    1185     # QName of the XSI type. 
    1186     TYPE_NAME = QName(SAMLConstants.SAML20P_NS,  
    1187                       TYPE_LOCAL_NAME, 
    1188                       SAMLConstants.SAML20P_PREFIX) 
    1189      
    1190     def __init__(self): 
    1191         # child "any" elements. 
    1192         self.__unknownChildren = TypedList(SAMLObject)          
    1193         self.__qname = QName(StatusDetail.DEFAULT_ELEMENT_NAME.namespaceURI, 
    1194                              StatusDetail.DEFAULT_ELEMENT_NAME, 
    1195                              StatusDetail.DEFAULT_ELEMENT_NAME.prefix) 
    1196      
    1197     def getUnknownXMLObjects(self, qname=None):  
    1198         if qname is not None: 
    1199             if not isinstance(qname, QName): 
    1200                 raise TypeError("\"qname\" must be a %r derived type, " 
    1201                                 "got %r" % (QName, type(qname))) 
    1202                  
    1203             children = [] 
    1204             for child in self.__unknownChildren: 
    1205                 childQName = getattr(child, "qname", None) 
    1206                 if childQName is not None: 
    1207                     if childQName.namespaceURI == qname.namespaceURI or \ 
    1208                        childQName.localPart == qname.localPart: 
    1209                         children.append(child) 
    1210                          
    1211             return children 
    1212         else: 
    1213             return self.__unknownChildren 
    1214      
    1215     unknownChildren = property(fget=getUnknownXMLObjects, 
    1216                                doc="Child objects of Status Detail - may be " 
    1217                                    "any type") 
    1218                  
    1219     def _getQName(self): 
    1220         return self.__qname 
    1221          
    1222     def _setQName(self, value): 
    1223         if not isinstance(value, QName): 
    1224             raise TypeError("\"qname\" must be a %r derived type, " 
    1225                             "got %r" % (QName, type(value))) 
    1226              
    1227         self.__qname = value 
    1228  
    1229     qname = property(fget=_getQName, fset=_setQName, doc="qualified name") 
    1230      
    1231  
    1232 class StatusMessage(SAMLObject): 
    1233     '''Implementation of SAML 2.0 Status Message.''' 
    1234  
    1235     def __init__(self): 
    1236         # Value attribute URI. 
    1237         self.__value = None         
    1238         self.__qname = None 
    1239                
    1240     def _getValue(self): 
    1241         return self.__value 
    1242          
    1243     def _setValue(self, value): 
    1244         if not isinstance(value, basestring): 
    1245             raise TypeError("\"value\" must be a basestring derived type, " 
    1246                             "got %r" % value.__class__) 
    1247              
    1248         self.__value = value 
    1249  
    1250     value = property(fget=_getValue, fset=_setValue,  
    1251                      doc="Status message value") 
    1252                  
    1253     def _getQName(self): 
    1254         return self.__qname 
    1255          
    1256     def _setQName(self, value): 
    1257         if not isinstance(value, QName): 
    1258             raise TypeError("\"qname\" must be a %r derived type, " 
    1259                             "got %r" % (QName, type(value))) 
    1260              
    1261         self.__qname = value 
    1262  
    1263     qname = property(fget=_getQName, fset=_setQName, doc="qualified name") 
    1264  
    1265  
    1266 class StatusCode(SAMLObject): 
    1267     '''Implementation of SAML 2.0 StatusCode.''' 
    1268     # Local Name of StatusCode. 
    1269     DEFAULT_ELEMENT_LOCAL_NAME = "StatusCode" 
    1270  
    1271     # Default element name. 
    1272     DEFAULT_ELEMENT_NAME = QName(SAMLConstants.SAML20P_NS,  
    1273                                  DEFAULT_ELEMENT_LOCAL_NAME, 
    1274                                  SAMLConstants.SAML20P_PREFIX) 
    1275  
    1276     # Local name of the XSI type. 
    1277     TYPE_LOCAL_NAME = "StatusCodeType" 
    1278  
    1279     # QName of the XSI type. 
    1280     TYPE_NAME = QName(SAMLConstants.SAML20P_NS,  
    1281                       TYPE_LOCAL_NAME, 
    1282                       SAMLConstants.SAML20P_PREFIX) 
    1283  
    1284     # Local Name of the Value attribute. 
    1285     VALUE_ATTRIB_NAME = "Value" 
    1286  
    1287     # URI for Success status code. 
    1288     SUCCESS_URI = "urn:oasis:names:tc:SAML:2.0:status:Success" 
    1289  
    1290     # URI for Requester status code. 
    1291     REQUESTER_URI = "urn:oasis:names:tc:SAML:2.0:status:Requester" 
    1292  
    1293     # URI for Responder status code. 
    1294     RESPONDER_URI = "urn:oasis:names:tc:SAML:2.0:status:Responder" 
    1295  
    1296     # URI for VersionMismatch status code. 
    1297     VERSION_MISMATCH_URI = "urn:oasis:names:tc:SAML:2.0:status:VersionMismatch" 
    1298  
    1299     # URI for AuthnFailed status code. 
    1300     AUTHN_FAILED_URI = "urn:oasis:names:tc:SAML:2.0:status:AuthnFailed" 
    1301  
    1302     # URI for InvalidAttrNameOrValue status code. 
    1303     INVALID_ATTR_NAME_VALUE_URI = \ 
    1304                 "urn:oasis:names:tc:SAML:2.0:status:InvalidAttrNameOrValue" 
    1305  
    1306     # URI for InvalidNameIDPolicy status code. 
    1307     INVALID_NAMEID_POLICY_URI = \ 
    1308                 "urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy" 
    1309  
    1310     # URI for NoAuthnContext status code. 
    1311     NO_AUTHN_CONTEXT_URI = "urn:oasis:names:tc:SAML:2.0:status:NoAuthnContext" 
    1312  
    1313     # URI for NoAvailableIDP status code. 
    1314     NO_AVAILABLE_IDP_URI = "urn:oasis:names:tc:SAML:2.0:status:NoAvailableIDP" 
    1315  
    1316     # URI for NoPassive status code. 
    1317     NO_PASSIVE_URI = "urn:oasis:names:tc:SAML:2.0:status:NoPassive" 
    1318  
    1319     # URI for NoSupportedIDP status code. 
    1320     NO_SUPPORTED_IDP_URI = "urn:oasis:names:tc:SAML:2.0:status:NoSupportedIDP" 
    1321  
    1322     # URI for PartialLogout status code. 
    1323     PARTIAL_LOGOUT_URI = "urn:oasis:names:tc:SAML:2.0:status:PartialLogout" 
    1324  
    1325     # URI for ProxyCountExceeded status code. 
    1326     PROXY_COUNT_EXCEEDED_URI = \ 
    1327                 "urn:oasis:names:tc:SAML:2.0:status:ProxyCountExceeded" 
    1328  
    1329     # URI for RequestDenied status code. 
    1330     REQUEST_DENIED_URI = "urn:oasis:names:tc:SAML:2.0:status:RequestDenied" 
    1331  
    1332     # URI for RequestUnsupported status code. 
    1333     REQUEST_UNSUPPORTED_URI = \ 
    1334                 "urn:oasis:names:tc:SAML:2.0:status:RequestUnsupported" 
    1335  
    1336     # URI for RequestVersionDeprecated status code. 
    1337     REQUEST_VERSION_DEPRECATED_URI = \ 
    1338                 "urn:oasis:names:tc:SAML:2.0:status:RequestVersionDeprecated" 
    1339  
    1340     # URI for RequestVersionTooHigh status code. 
    1341     REQUEST_VERSION_TOO_HIGH_URI = \ 
    1342                 "urn:oasis:names:tc:SAML:2.0:status:RequestVersionTooHigh" 
    1343      
    1344     # URI for RequestVersionTooLow status code. 
    1345     REQUEST_VERSION_TOO_LOW_URI = \ 
    1346                 "urn:oasis:names:tc:SAML:2.0:status:RequestVersionTooLow" 
    1347  
    1348     # URI for ResourceNotRecognized status code. 
    1349     RESOURCE_NOT_RECOGNIZED_URI = \ 
    1350                 "urn:oasis:names:tc:SAML:2.0:status:ResourceNotRecognized" 
    1351  
    1352     # URI for TooManyResponses status code. 
    1353     TOO_MANY_RESPONSES = "urn:oasis:names:tc:SAML:2.0:status:TooManyResponses" 
    1354  
    1355     # URI for UnknownAttrProfile status code. 
    1356     UNKNOWN_ATTR_PROFILE_URI = \ 
    1357                 "urn:oasis:names:tc:SAML:2.0:status:UnknownAttrProfile" 
    1358  
    1359     # URI for UnknownPrincipal status code. 
    1360     UNKNOWN_PRINCIPAL_URI = \ 
    1361                 "urn:oasis:names:tc:SAML:2.0:status:UnknownPrincipal" 
    1362  
    1363     # URI for UnsupportedBinding status code. 
    1364     UNSUPPORTED_BINDING_URI = \ 
    1365                 "urn:oasis:names:tc:SAML:2.0:status:UnsupportedBinding" 
    1366  
    1367     def __init__(self): 
    1368         # Value attribute URI. 
    1369         self.__value = None 
    1370      
    1371         # Nested secondary StatusCode child element. 
    1372         self.__childStatusCode = None 
    1373          
    1374         self.__qname = QName(StatusCode.DEFAULT_ELEMENT_NAME.namespaceURI, 
    1375                              StatusCode.DEFAULT_ELEMENT_NAME.localPart, 
    1376                              StatusCode.DEFAULT_ELEMENT_NAME.prefix) 
    1377  
    1378     def _getStatusCode(self):  
    1379         return self.__childStatusCode 
    1380      
    1381     def _setStatusCode(self, value): 
    1382         if not isinstance(value, StatusCode): 
    1383             raise TypeError('Child "statusCode" must be a %r derived type, ' 
    1384                             "got %r" % (StatusCode, type(value))) 
    1385              
    1386         self.__childStatusCode = value 
    1387  
    1388     value = property(fget=_getStatusCode,  
    1389                      fset=_setStatusCode,  
    1390                      doc="Child Status code") 
    1391                
    1392     def _getValue(self): 
    1393         return self.__value 
    1394          
    1395     def _setValue(self, value): 
    1396         if not isinstance(value, basestring): 
    1397             raise TypeError("\"value\" must be a basestring derived type, " 
    1398                             "got %r" % value.__class__) 
    1399              
    1400         self.__value = value 
    1401  
    1402     value = property(fget=_getValue, fset=_setValue, doc="Status code value") 
    1403                  
    1404     def _getQName(self): 
    1405         return self.__qname 
    1406          
    1407     def _setQName(self, value): 
    1408         if not isinstance(value, QName): 
    1409             raise TypeError("\"qname\" must be a %r derived type, " 
    1410                             "got %r" % (QName, type(value))) 
    1411              
    1412         self.__qname = value 
    1413  
    1414     qname = property(fget=_getQName, fset=_setQName, doc="qualified name") 
    1415          
    1416  
    1417 class Status(SAMLObject):  
    1418     ''' 
    1419     SAML 2.0 Core Status. 
    1420     ''' 
    1421      
    1422     # Local Name of Status. 
    1423     DEFAULT_ELEMENT_LOCAL_NAME = "Status" 
    1424  
    1425     # Default element name. 
    1426     DEFAULT_ELEMENT_NAME = QName(SAMLConstants.SAML20P_NS,  
    1427                                  DEFAULT_ELEMENT_LOCAL_NAME, 
    1428                                  SAMLConstants.SAML20P_PREFIX) 
    1429  
    1430     # Local name of the XSI type. 
    1431     TYPE_LOCAL_NAME = "StatusType" 
    1432  
    1433     # QName of the XSI type. 
    1434     TYPE_NAME = QName(SAMLConstants.SAML20P_NS,  
    1435                       TYPE_LOCAL_NAME, 
    1436                       SAMLConstants.SAML20P_PREFIX) 
    1437  
    1438     def __init__(self): 
    1439         # StatusCode element. 
    1440         self.__statusCode = None 
    1441      
    1442         # StatusMessage element. 
    1443         self.__statusMessage = None 
    1444      
    1445         # StatusDetail element.  
    1446         self.__statusDetail = None 
    1447          
    1448         self.__qname = QName(Status.DEFAULT_ELEMENT_NAME.namespaceURI, 
    1449                              Status.DEFAULT_ELEMENT_NAME.localPart, 
    1450                              Status.DEFAULT_ELEMENT_NAME.prefix) 
    1451                  
    1452     def _getQName(self): 
    1453         return self.__qname 
    1454          
    1455     def _setQName(self, value): 
    1456         if not isinstance(value, QName): 
    1457             raise TypeError("\"qname\" must be a %r derived type, " 
    1458                             "got %r" % (QName, type(value))) 
    1459              
    1460         self.__qname = value 
    1461  
    1462     qname = property(fget=_getQName, fset=_setQName, doc="qualified name") 
    1463          
    1464     def _getStatusCode(self): 
    1465         ''' 
    1466         Gets the Code of this Status. 
    1467          
    1468         @return Status StatusCode 
    1469         ''' 
    1470         return self.__statusCode 
    1471  
    1472     def _setStatusCode(self, value): 
    1473         ''' 
    1474         Sets the Code of this Status. 
    1475          
    1476         @param newStatusCode the Code of this Status 
    1477         ''' 
    1478         if not isinstance(value, StatusCode): 
    1479             raise TypeError('"statusCode" must be a %r derived type, ' 
    1480                             "got %r" % (StatusCode, type(value))) 
    1481              
    1482         self.__statusCode = value 
    1483          
    1484     statusCode = property(fget=_getStatusCode, 
    1485                           fset=_setStatusCode, 
    1486                           doc="status code object") 
    1487      
    1488     def _getStatusMessage(self): 
    1489         ''' 
    1490         Gets the Message of this Status. 
    1491          
    1492         @return Status StatusMessage 
    1493         ''' 
    1494         return self.__statusMessage 
    1495  
    1496     def _setStatusMessage(self, value): 
    1497         ''' 
    1498         Sets the Message of this Status. 
    1499          
    1500         @param newStatusMessage the Message of this Status 
    1501         ''' 
    1502         if not isinstance(value, basestring): 
    1503             raise TypeError('"statusMessage" must be a %r derived type, ' 
    1504                             "got %r" % (basestring, type(value))) 
    1505              
    1506         self.__statusMessage = value 
    1507          
    1508     statusMessage = property(fget=_getStatusMessage, 
    1509                              fset=_setStatusMessage, 
    1510                              doc="status message") 
    1511  
    1512     def _getStatusDetail(self): 
    1513         ''' 
    1514         Gets the Detail of this Status. 
    1515          
    1516         @return Status StatusDetail 
    1517         ''' 
    1518         return self.__statusDetail 
    1519      
    1520     def _setStatusDetail(self, value): 
    1521         ''' 
    1522         Sets the Detail of this Status. 
    1523          
    1524         @param newStatusDetail the Detail of this Status 
    1525         ''' 
    1526         self.__statusDetail = value 
    1527          
    1528     statusDetail = property(fget=_getStatusDetail, 
    1529                             fset=_setStatusDetail, 
    1530                             doc="status message") 
    1531  
    1532  
    1533 class StatusResponseType(SAMLObject): 
    1534     '''SAML 2.0 Core Status Response Type 
    1535     ''' 
    1536  
    1537     # Local name of the XSI type. 
    1538     TYPE_LOCAL_NAME = "StatusResponseType" 
    1539  
    1540     # QName of the XSI type. 
    1541     TYPE_NAME = QName(SAMLConstants.SAML20P_NS,  
    1542                       TYPE_LOCAL_NAME, 
    1543                       SAMLConstants.SAML20P_PREFIX) 
    1544  
    1545     # ID attribute name 
    1546     ID_ATTRIB_NAME = "ID" 
    1547  
    1548     # InResponseTo attribute name 
    1549     IN_RESPONSE_TO_ATTRIB_NAME = "InResponseTo" 
    1550  
    1551     # Version attribute name 
    1552     VERSION_ATTRIB_NAME = "Version" 
    1553  
    1554     # IssueInstant attribute name 
    1555     ISSUE_INSTANT_ATTRIB_NAME = "IssueInstant" 
    1556  
    1557     # Destination attribute name 
    1558     DESTINATION_ATTRIB_NAME = "Destination" 
    1559  
    1560     # Consent attribute name. 
    1561     CONSENT_ATTRIB_NAME = "Consent" 
    1562  
    1563     # Unspecified consent URI 
    1564     UNSPECIFIED_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:unspecified" 
    1565  
    1566     # Obtained consent URI 
    1567     OBTAINED_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:obtained" 
    1568  
    1569     # Prior consent URI 
    1570     PRIOR_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:prior" 
    1571  
    1572     # Implicit consent URI 
    1573     IMPLICIT_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:implicit" 
    1574  
    1575     # Explicit consent URI 
    1576     EXPLICIT_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:explicit" 
    1577  
    1578     # Unavailable consent URI 
    1579     UNAVAILABLE_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:unavailable" 
    1580  
    1581     # Inapplicable consent URI 
    1582     INAPPLICABLE_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:inapplicable" 
    1583  
    1584     def __init__(self): 
    1585         self.__qname = None 
    1586          
    1587         self.__version = SAMLVersion(SAMLVersion.VERSION_20) 
    1588         self.__id = None 
    1589         self.__inResponseTo = None 
    1590         self.__issueInstant = None 
    1591         self.__destination = None 
    1592         self.__consent = None 
    1593         self.__issuer = None 
    1594         self.__status = None 
    1595         self.__extensions = None 
    1596          
    1597     def _getQName(self): 
    1598         return self.__qname 
    1599          
    1600     def _setQName(self, value): 
    1601         if not isinstance(value, QName): 
    1602             raise TypeError("\"qname\" must be a %r derived type, " 
    1603                             "got %r" % (QName, type(value))) 
    1604              
    1605         self.__qname = value 
    1606  
    1607     qname = property(fget=_getQName, fset=_setQName, doc="qualified name") 
    1608  
    1609     def _get_version(self): 
    1610         '''@return the SAML Version of this response. 
    1611         ''' 
    1612         return self.__version 
    1613      
    1614     def _set_version(self, version): 
    1615         '''@param version the SAML Version of this response 
    1616         ''' 
    1617         if not isinstance(version, SAMLVersion): 
    1618             raise TypeError("Expecting SAMLVersion type got: %r" %  
    1619                             version.__class__) 
    1620          
    1621         self.__version = version 
    1622         
    1623     version = property(fget=_get_version, 
    1624                        fset=_set_version, 
    1625                        doc="SAML Version of the response") 
    1626  
    1627     def _get_id(self): 
    1628         '''Sets the ID of this response. 
    1629          
    1630         @return the ID of this response 
    1631         ''' 
    1632         return self.__id 
    1633      
    1634     def _set_id(self, value): 
    1635         '''Sets the ID of this response. 
    1636          
    1637         @param value: the ID of this response 
    1638         ''' 
    1639         if not isinstance(value, basestring): 
    1640             raise TypeError('Expecting basestring derived type for "id", got ' 
    1641                             '%r' % type(value)) 
    1642         self.__id = value 
    1643          
    1644     id = property(fget=_get_id, fset=_set_id, doc="ID of response") 
    1645  
    1646     def _getInResponseTo(self): 
    1647         '''Get the unique request identifier for which this is a response 
    1648          
    1649         @return value: the unique identifier of the originating  
    1650         request 
    1651         ''' 
    1652         return self.__inResponseTo 
    1653      
    1654     def _setInResponseTo(self, value): 
    1655         '''Set the unique request identifier for which this is a response 
    1656          
    1657         @param value: the unique identifier of the originating  
    1658         request 
    1659         ''' 
    1660         if not isinstance(value, basestring): 
    1661             raise TypeError('Expecting basestring derived type for ' 
    1662                             '"inResponseTo", got %r' % type(value)) 
    1663         self.__inResponseTo = value 
    1664          
    1665     inResponseTo = property(fget=_getInResponseTo,  
    1666                             fset=_setInResponseTo, 
    1667                             doc="unique request identifier for which this is " 
    1668                                 "a response") 
    1669  
    1670     def _get_issueInstant(self): 
    1671         '''Gets the issue instance of this response. 
    1672          
    1673         @return the issue instance of this response''' 
    1674         return self.__issueInstant 
    1675      
    1676     def _set_issueInstant(self, issueInstant): 
    1677         '''Sets the issue instance of this response. 
    1678          
    1679         @param newIssueInstance the issue instance of this response 
    1680         ''' 
    1681         if not isinstance(issueInstant, datetime): 
    1682             raise TypeError('Expecting "datetime" type for "issueInstant", ' 
    1683                             'got %r' % issueInstant.__class__) 
    1684              
    1685         self.__issueInstant = issueInstant 
    1686          
    1687     issueInstant = property(fget=_get_issueInstant,  
    1688                             fset=_set_issueInstant, 
    1689                             doc="Issue instant of the response") 
    1690  
    1691     def _get_destination(self): 
    1692         '''Gets the URI of the destination of the response. 
    1693          
    1694         @return the URI of the destination of the response 
    1695         ''' 
    1696         return self.__destination 
    1697      
    1698     def _set_destination(self, value): 
    1699         '''Sets the URI of the destination of the response. 
    1700          
    1701         @param value: the URI of the destination of the response''' 
    1702         if not isinstance(value, basestring): 
    1703             raise TypeError('Expecting basestring derived type for ' 
    1704                             '"destination", got %r' % type(value)) 
    1705         self.__destination = value 
    1706          
    1707     destination = property(fget=_get_destination,  
    1708                            fset=_set_destination, 
    1709                            doc="Destination of response") 
    1710       
    1711     def _get_consent(self): 
    1712         '''Gets the consent obtained from the principal for sending this  
    1713         response. 
    1714          
    1715         @return: the consent obtained from the principal for sending this  
    1716         response 
    1717         ''' 
    1718         return self.__consent 
    1719          
    1720     def _set_consent(self, value): 
    1721         '''Sets the consent obtained from the principal for sending this  
    1722         response. 
    1723          
    1724         @param value: the new consent obtained from the principal for  
    1725         sending this response 
    1726         '''  
    1727         if not isinstance(value, basestring): 
    1728             raise TypeError('Expecting basestring derived type for "consent", ' 
    1729                             'got %r' % type(value)) 
    1730         self.__consent = value 
    1731                
    1732     consent = property(fget=_get_consent,  
    1733                        fset=_set_consent, 
    1734                        doc="Consent for response") 
    1735     
    1736     def _set_issuer(self, issuer): 
    1737         """Set issuer of response""" 
    1738         if not isinstance(issuer, Issuer): 
    1739             raise TypeError('"issuer" must be a %r, got %r' % (Issuer, 
    1740                                                                type(issuer))) 
    1741         self.__issuer = issuer 
    1742      
    1743     def _get_issuer(self): 
    1744         """Get the issuer name """ 
    1745         return self.__issuer 
    1746  
    1747     issuer = property(fget=_get_issuer,  
    1748                       fset=_set_issuer, 
    1749                       doc="Issuer of response") 
    1750      
    1751     def _getStatus(self): 
    1752         '''Gets the Status of this response. 
    1753          
    1754         @return the Status of this response 
    1755         ''' 
    1756         return self.__status 
    1757  
    1758     def _setStatus(self, value): 
    1759         '''Sets the Status of this response. 
    1760          
    1761         @param newStatus the Status of this response 
    1762         ''' 
    1763         if not isinstance(value, Status): 
    1764             raise TypeError('"status" must be a %r, got %r' % (Status, 
    1765                                                                type(value))) 
    1766         self.__status = value 
    1767          
    1768     status = property(fget=_getStatus, fset=_setStatus, doc="Response status")     
    1769          
    1770     def _get_extensions(self): 
    1771         '''Gets the Extensions of this response. 
    1772          
    1773         @return: the Status of this response 
    1774         ''' 
    1775         return self.__extensions 
    1776        
    1777     def _set_extensions(self, value): 
    1778         '''Sets the Extensions of this response. 
    1779          
    1780         @param value: the Extensions of this response 
    1781         ''' 
    1782         if not isinstance(value, (list, tuple)): 
    1783             raise TypeError('Expecting list or tuple for "extensions", got %r' 
    1784                             % type(value)) 
    1785         self.__extensions = value 
    1786          
    1787     extensions = property(fget=_get_extensions,  
    1788                           fset=_set_extensions, 
    1789                           doc="Response extensions")     
    1790  
    1791  
    1792 class Response(StatusResponseType): 
    1793     '''SAML2 Core Response''' 
    1794      
    1795     # Element local name. 
    1796     DEFAULT_ELEMENT_LOCAL_NAME = "Response" 
    1797      
    1798     # Default element name. 
    1799     DEFAULT_ELEMENT_NAME = QName(SAMLConstants.SAML20P_NS,  
    1800                                  DEFAULT_ELEMENT_LOCAL_NAME,  
    1801                                  SAMLConstants.SAML20P_PREFIX) 
    1802      
    1803     # Local name of the XSI type. 
    1804     TYPE_LOCAL_NAME = "ResponseType" 
    1805          
    1806     # QName of the XSI type. 
    1807     TYPE_NAME = QName(SAMLConstants.SAML20P_NS,  
    1808                       TYPE_LOCAL_NAME,  
    1809                       SAMLConstants.SAML20P_PREFIX) 
    1810      
    1811     def __init__(self): 
    1812         ''''''  
    1813         super(Response, self).__init__() 
    1814          
    1815         # Assertion child elements 
    1816         self.__indexedChildren = [] 
    1817      
    1818     def _getAssertions(self):  
    1819         return self.__indexedChildren 
    1820      
    1821     assertions = property(fget=_getAssertions, 
    1822                           doc="Assertions contained in this response") 
    1823  
    1824  
    1825 class SubjectQuery(RequestAbstractType): 
    1826  
    1827     def __init__(self): 
    1828         self.__subject = None 
    1829          
    1830     def _getSubject(self): 
    1831         '''Gets the Subject of this request. 
    1832          
    1833         @return the Subject of this request'''    
    1834         return self.__subject 
    1835      
    1836     def _setSubject(self, value): 
    1837         '''Sets the Subject of this request. 
    1838          
    1839         @param newSubject the Subject of this request''' 
    1840         if not isinstance(value, Subject): 
    1841             raise TypeError('Setting "subject", got %r, expecting %r' % 
    1842                             (Subject, type(value))) 
    1843              
    1844         self.__subject = value 
    1845          
    1846     subject = property(fget=_getSubject, fset=_setSubject, doc="Query subject") 
    1847      
    1848      
    1849 class AttributeQuery(SubjectQuery): 
    1850     '''SAML 2.0 AttributeQuery.''' 
    1851      
    1852     # Element local name. 
    1853     DEFAULT_ELEMENT_LOCAL_NAME = "AttributeQuery" 
    1854  
    1855     # Default element name. 
    1856     DEFAULT_ELEMENT_NAME = QName(SAMLConstants.SAML20P_NS,  
    1857                                  DEFAULT_ELEMENT_LOCAL_NAME, 
    1858                                  SAMLConstants.SAML20P_PREFIX) 
    1859  
    1860     # Local name of the XSI type. 
    1861     TYPE_LOCAL_NAME = "AttributeQueryType" 
    1862  
    1863     # QName of the XSI type. 
    1864     TYPE_NAME = QName(SAMLConstants.SAML20P_NS,  
    1865                       TYPE_LOCAL_NAME, 
    1866                       SAMLConstants.SAML20P_PREFIX) 
    1867  
    1868     def __init__(self): 
    1869         self.__attributes = TypedList(Attribute) 
    1870   
    1871     def _getAttributes(self): 
    1872         '''Gets the Attributes of this query. 
    1873          
    1874         @return the list of Attributes of this query''' 
    1875         return self.__attributes 
    1876  
    1877     def _setAttributes(self, value): 
    1878         self.__attributes = value 
    1879  
    1880     attributes = property(fget=_getAttributes,  
    1881                           fset=_setAttributes,  
    1882                           doc="Attributes") 
    1883  
  • TI12-security/trunk/python/ndg.security.saml/saml/test/test_saml.py

    r5596 r5597  
    2222from saml.xml.etree import prettyPrint 
    2323 
    24 from saml import Assertion, Attribute, AttributeValue, AttributeStatement, \ 
    25     SAMLVersion, XSStringAttributeValue, XSGroupRoleAttributeValue, \ 
    26     AttributeQuery, Response, Issuer, Subject, NameID, StatusCode, Status, \ 
    27     Conditions 
    28 from saml.xml import XMLConstants 
     24from saml import XSStringAttributeValue, XSGroupRoleAttributeValue 
     25     
     26from saml.saml2.core import SAMLVersion, Attribute, AttributeStatement, \ 
     27    Assertion, AttributeValue, AttributeQuery, Response, Issuer, Subject, \ 
     28    NameID, StatusCode, Status, Conditions 
     29from saml.common.xml import SAMLConstants 
    2930from saml.xml.etree import AssertionElementTree, \ 
    3031    XSGroupRoleAttributeValueElementTree, AttributeQueryElementTree, \ 
     
    142143            emailAddressAttribute = Attribute() 
    143144            emailAddressAttribute.name = "urn:esg:email:address" 
    144             emailAddressAttribute.nameFormat = XMLConstants.XSD_NS+"#"+\ 
     145            emailAddressAttribute.nameFormat = SAMLConstants.XSD_NS+"#"+\ 
    145146                                        XSStringAttributeValue.TYPE_LOCAL_NAME 
    146147            emailAddressAttribute.friendlyName = "emailAddress" 
  • TI12-security/trunk/python/ndg.security.saml/saml/xml/__init__.py

    r5596 r5597  
    2727__contact__ = "Philip.Kershaw@stfc.ac.uk" 
    2828__revision__ = "$Id$" 
    29 from datetime import datetime 
    3029try: 
    3130    from datetime import strptime 
     
    3534    strptime = lambda datetimeStr, format: datetime(*(_strptime(datetimeStr,  
    3635                                                                format)[0:6])) 
    37  
    38 class XMLConstants(object): 
    39     '''XML related constants.''' 
    40  
    41     # XML Tooling 
    42  
    43     # Configuration namespace 
    44     XMLTOOLING_CONFIG_NS = "http:#www.opensaml.org/xmltooling-config" 
    45  
    46     # Configuration namespace prefix 
    47     XMLTOOLING_CONFIG_PREFIX = "xt" 
    48      
    49     # Name of the object provider used for objects that don't have a registered 
    50     # object provider 
    51     XMLTOOLING_DEFAULT_OBJECT_PROVIDER = "DEFAULT" 
    52  
    53     # Core XML 
    54  
    55     # XML core namespace 
    56     XML_NS = "http:#www.w3.org/XML/1998/namespace" 
    57      
    58     # XML core prefix for xml attributes 
    59     XML_PREFIX = "xml" 
    60  
    61     # XML namespace for xmlns attributes 
    62     XMLNS_NS = "http://www.w3.org/2000/xmlns/" 
    63  
    64     # XML namespace prefix for xmlns attributes 
    65     XMLNS_PREFIX = "xmlns" 
    66  
    67     # XML Schema namespace 
    68     XSD_NS = "http://www.w3.org/2001/XMLSchema" 
    69  
    70     # XML Schema QName prefix 
    71     XSD_PREFIX = "xs" 
    72  
    73     # XML Schema Instance namespace 
    74     XSI_NS = "http://www.w3.org/2001/XMLSchema-instance" 
    75  
    76     # XML Schema Instance QName prefix 
    77     XSI_PREFIX = "xsi" 
    78  
    79     # XML XMLSecSignatureImpl namespace 
    80     XMLSIG_NS = "http://www.w3.org/2000/09/xmldsig#" 
    81  
    82     # XML XMLSecSignatureImpl QName prefix 
    83     XMLSIG_PREFIX = "ds" 
    84  
    85     # XML Encryption namespace 
    86     XMLENC_NS = "http://www.w3.org/2001/04/xmlenc#" 
    87  
    88     # XML Encryption QName prefix 
    89     XMLENC_PREFIX = "xenc" 
    90      
    91     # Local name of EncryptedData element 
    92     XMLENC_ENCDATA_LOCAL_NAME = "EncryptedData" 
    93      
    94     # Local name of EncryptedKey element 
    95     XMLENC_ENCKEY_LOCAL_NAME = "EncryptedKey" 
    96      
    97  
    98 class SAMLConstants(XMLConstants): 
    99     '''XML related constants used in the SAML specifications.''' 
    100      
    101     # HTTP Constants 
    102      
    103     # HTTP Request Method - POST. 
    104     POST_METHOD = "POST" 
    105      
    106     # HTTP Method - GET. 
    107     GET_METHOD = "GET" 
    108      
    109     # OpenSAML 2 
    110      
    111     # Directory, on the classpath, schemas are located in. 
    112     SCHEMA_DIR = "/schema/" 
    113      
    114     #    Core XML 
    115      
    116     # XML core schema system Id. 
    117     XML_SCHEMA_LOCATION = SCHEMA_DIR + "xml.xsd" 
    118      
    119     #  XML Signature schema Id. 
    120     XMLSIG_SCHEMA_LOCATION = SCHEMA_DIR + "xmldsig-core-schema.xsd" 
    121      
    122     # XML Encryption schema Id. 
    123     XMLENC_SCHEMA_LOCATION = SCHEMA_DIR + "xenc-schema.xsd" 
    124  
    125      
    126     #    SOAP 
    127      
    128     #  SOAP 1.1 schema Id. 
    129     SOAP11ENV_SCHEMA_LOCATION = SCHEMA_DIR + SCHEMA_DIR + "soap-envelope.xsd" 
    130      
    131     #  SOAP 1.1 Envelope XML namespace. 
    132     SOAP11ENV_NS = "http://schemas.xmlsoap.org/soap/envelope/" 
    133      
    134     #  SOAP 1.1 Envelope QName prefix. 
    135     SOAP11ENV_PREFIX = "SOAP-ENV" 
    136      
    137     #  Liberty PAOS XML Namespace. 
    138     PAOS_NS = "urn:liberty:paos:2003-08" 
    139      
    140     #  Liberty PAOS QName prefix. 
    141     PAOS_PREFIX = "paos" 
    142      
    143     #    SAML 1.X 
    144      
    145     # SAML 1.0 Assertion schema system Id. 
    146     SAML10_SCHEMA_LOCATION = SCHEMA_DIR + "cs-sstc-schema-assertion-01.xsd" 
    147      
    148     # SAML 1.1 Assertion schema system Id. 
    149     SAML11_SCHEMA_LOCATION = SCHEMA_DIR + "cs-sstc-schema-assertion-1.1.xsd" 
    150      
    151     # SAML 1.X XML namespace. 
    152     SAML1_NS = "urn:oasis:names:tc:SAML:1.0:assertion" 
    153      
    154     # SAML 1.0 Protocol schema system Id. 
    155     SAML10P_SCHEMA_LOCATION = SCHEMA_DIR + "cs-sstc-schema-protocol-01.xsd" 
    156      
    157     # SAML 1.1 Protocol schema system Id. 
    158     SAML11P_SCHEMA_LOCATION = SCHEMA_DIR + "cs-sstc-schema-protocol-1.1.xsd" 
    159  
    160     # SAML 1.X protocol XML namespace. 
    161     SAML10P_NS = "urn:oasis:names:tc:SAML:1.0:protocol" 
    162      
    163     # SAML 1.1 protocol XML namespace, used only in SAML 2 metadata protocol 
    164     # SupportEnumeration. 
    165     SAML11P_NS = "urn:oasis:names:tc:SAML:1.1:protocol" 
    166      
    167     # SAML 1.X Protocol QName prefix. 
    168     SAML1P_PREFIX = "samlp" 
    169  
    170     # SAML 1.X Assertion QName prefix. 
    171     SAML1_PREFIX = "saml" 
    172      
    173     # SAML 1 Metadata extension XML namespace. 
    174     SAML1MD_NS = "urn:oasis:names:tc:SAML:profiles:v1metadata" 
    175      
    176     # SAML 1 Metadata extension schema system Id. 
    177     SAML1MD_SCHEMA_LOCATION = SCHEMA_DIR + "sstc-saml1x-metadata.xsd" 
    178      
    179     # SAML 1 Metadata extension namespace prefix. 
    180     SAML1MD_PREFIX = "saml1md" 
    181      
    182     # URI for SAML 1 Artifact binding. 
    183     SAML1_ARTIFACT_BINDING_URI = \ 
    184         "urn:oasis:names:tc:SAML:1.0:profiles:artifact-01" 
    185      
    186     # URI for SAML 1 POST binding. 
    187     SAML1_POST_BINDING_URI = \ 
    188         "urn:oasis:names:tc:SAML:1.0:profiles:browser-post" 
    189      
    190     # URI for SAML 1 SOAP 1.1 binding. 
    191     SAML1_SOAP11_BINDING_URI = \ 
    192         "urn:oasis:names:tc:SAML:1.0:bindings:SOAP-binding" 
    193      
    194     #    SAML 2.0 
    195      
    196     # SAML 2.0 Assertion schema Id. 
    197     SAML20_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-assertion-2.0.xsd" 
    198      
    199     # SAML 2.0 Assertion XML Namespace. 
    200     SAML20_NS = "urn:oasis:names:tc:SAML:2.0:assertion" 
    201      
    202     # SAML 2.0 Assertion QName prefix. 
    203     SAML20_PREFIX ="saml" 
    204      
    205     # SAML 2.0 Protocol schema Id. 
    206     SAML20P_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-protocol-2.0.xsd" 
    207      
    208     # SAML 2.0 Protocol XML Namespace. 
    209     SAML20P_NS = "urn:oasis:names:tc:SAML:2.0:protocol" 
    210      
    211     # SAML 2.0 Protocol QName prefix. 
    212     SAML20P_PREFIX ="samlp" 
    213      
    214     # SAML 2.0 Protocol Third-party extension schema Id. 
    215     SAML20PTHRPTY_SCHEMA_LOCATION = SCHEMA_DIR + \ 
    216                                     "sstc-saml-protocol-ext-thirdparty.xsd" 
    217      
    218     # SAML 2.0 Protocol XML Namespace. 
    219     SAML20PTHRPTY_NS = "urn:oasis:names:tc:SAML:protocol:ext:third-party" 
    220      
    221     # SAML 2.0 Protocol QName prefix. 
    222     SAML20PTHRPTY_PREFIX ="thrpty" 
    223      
    224     # SAML 2.0 Metadata schema Id. 
    225     SAML20MD_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-metadata-2.0.xsd" 
    226      
    227     # SAML 2.0 Metadata XML Namespace. 
    228     SAML20MD_NS ="urn:oasis:names:tc:SAML:2.0:metadata" 
    229      
    230     # SAML 2.0 Standalone Query Metadata extension XML namespace. 
    231     SAML20MDQUERY_NS = "urn:oasis:names:tc:SAML:metadata:ext:query" 
    232      
    233     # SAML 2.0 Standalone Query Metadata extension schema system Id. 
    234     SAML20MDQUERY_SCHEMA_LOCATION = SCHEMA_DIR + \ 
    235                                     "sstc-saml-metadata-ext-query.xsd" 
    236      
    237     # SAML 2.0 Standalone Query Metadata extension prefix. 
    238     SAML20MDQUERY_PREFIX = "query" 
    239      
    240     # SAML 2.0 Metadata QName prefix. 
    241     SAML20MD_PREFIX = "md" 
    242      
    243     # SAML 2.0 Authentication Context schema Id. 
    244     SAML20AC_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-authn-context-2.0.xsd" 
    245      
    246     # SAML 2.0 Authentication Context XML Namespace. 
    247     SAML20AC_NS ="urn:oasis:names:tc:SAML:2.0:ac" 
    248      
    249     # SAML 2.0 Authentication Context QName prefix. 
    250     SAML20AC_PREFIX = "ac" 
    251      
    252     # SAML 2.0 Enhanced Client/Proxy SSO Profile schema Id. 
    253     SAML20ECP_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-ecp-2.0.xsd" 
    254      
    255     # SAML 2.0 Enhanced Client/Proxy SSO Profile XML Namespace. 
    256     SAML20ECP_NS = "urn:oasis:names:tc:SAML:2.0:profiles:SSO:ecp" 
    257      
    258     # SAML 2.0 Enhanced Client/Proxy SSO Profile QName prefix. 
    259     SAML20ECP_PREFIX = "ecp" 
    260      
    261     # SAML 2.0 DCE PAC Attribute Profile schema Id. 
    262     SAML20DCE_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-dce-2.0.xsd" 
    263      
    264     # SAML 2.0 DCE PAC Attribute Profile XML Namespace. 
    265     SAML20DCE_NS = "urn:oasis:names:tc:SAML:2.0:profiles:attribute:DCE" 
    266      
    267     # SAML 2.0 DCE PAC Attribute Profile QName prefix. 
    268     SAML20DCE_PREFIX = "DCE" 
    269      
    270     # SAML 2.0 X.500 Attribute Profile schema Id. 
    271     SAML20X500_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-x500-2.0.xsd" 
    272      
    273     # SAML 2.0 X.500 Attribute Profile XML Namespace. 
    274     SAML20X500_NS = "urn:oasis:names:tc:SAML:2.0:profiles:attribute:X500" 
    275      
    276     # SAML 2.0 X.500 Attribute Profile QName prefix. 
    277     SAML20X500_PREFIX = "x500" 
    278      
    279     # SAML 2.0 XACML Attribute Profile schema Id. 
    280     SAML20XACML_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-xacml-2.0.xsd" 
    281      
    282     # SAML 2.0 XACML Attribute Profile XML Namespace. 
    283     SAML20XACML_NS = "urn:oasis:names:tc:SAML:2.0:profiles:attribute:XACML" 
    284      
    285     # SAML 2.0 XACML Attribute Profile QName prefix. 
    286     SAML20XACML_PREFIX = "xacmlprof" 
    287      
    288     # URI for SAML 2 Artifact binding. 
    289     SAML2_ARTIFACT_BINDING_URI = \ 
    290                         "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" 
    291      
    292     # URI for SAML 2 POST binding. 
    293     SAML2_POST_BINDING_URI = "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" 
    294      
    295     # URI for SAML 2 POST-SimpleSign binding. 
    296     SAML2_POST_SIMPLE_SIGN_BINDING_URI = \ 
    297                 "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign" 
    298      
    299     # URI for SAML 2 HTTP redirect binding. 
    300     SAML2_REDIRECT_BINDING_URI = \ 
    301                 "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" 
    302      
    303     # URI for SAML 2 SOAP binding. 
    304     SAML2_SOAP11_BINDING_URI = "urn:oasis:names:tc:SAML:2.0:bindings:SOAP" 
     36from datetime import datetime 
    30537 
    30638class XMLObjectError(Exception): 
  • TI12-security/trunk/python/ndg.security.saml/saml/xml/etree.py

    r5596 r5597  
    3838    import cElementTree, ElementTree 
    3939 
    40 from saml import SAMLObject, Conditions, Assertion, Attribute, \ 
    41     AttributeStatement, AttributeValue, XSStringAttributeValue, \ 
    42     Response, AttributeQuery, Subject, NameID, Issuer, SAMLVersion, Response, \ 
    43     Status, StatusCode, XSGroupRoleAttributeValue 
    44      
    45 from saml.xml import XMLObject, IssueInstantXMLObject, XMLObjectParseError, \ 
    46     SAMLConstants 
     40from saml import XSStringAttributeValue, XSGroupRoleAttributeValue 
     41 
     42from saml.saml2.core import SAMLObject, Attribute, AttributeStatement, \ 
     43    Assertion, Conditions, AttributeValue, AttributeQuery, Subject, NameID, \ 
     44    Issuer, SAMLVersion, Response, Status, StatusCode 
     45from saml.common.xml import SAMLConstants 
     46from saml.xml import IssueInstantXMLObject, XMLObjectParseError 
    4747from saml.xml import QName as GenericQName 
    4848 
Note: See TracChangeset for help on using the changeset viewer.