Changeset 5528


Ignore:
Timestamp:
28/07/09 12:32:28 (10 years ago)
Author:
pjkersha
Message:

Started SAML AttributeQuery? implementation.

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

Legend:

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

    r5514 r5528  
    566566        # no children 
    567567        return None 
     568 
     569 
     570class Subject(SAMLObject): 
     571    '''Concrete implementation of @link org.opensaml.saml2.core.Subject.''' 
     572 
     573    def __init__(self, namespaceURI, elementLocalName, namespacePrefix): 
     574        '''@param namespaceURI the namespace the element is in 
     575        @param elementLocalName the local name of the XML element this Object  
     576        represents 
     577        @param namespacePrefix the prefix for the given namespace 
     578        ''' 
     579        super(namespaceURI, elementLocalName, namespacePrefix) 
     580         
     581        # BaseID child element. 
     582        self.__baseID = None 
     583     
     584        # NameID child element. 
     585        self.__nameID = None 
     586     
     587        # EncryptedID child element. 
     588        self.__encryptedID = None 
     589     
     590        # Subject Confirmations of the Subject. 
     591        self.__subjectConfirmations = [] 
     592     
     593    def _getBaseID(self):  
     594        return self.__baseID 
     595 
     596    def _setBaseID(self, value): 
     597        self.__baseID = value 
     598     
     599    def _getNameID(self): 
     600        return self.__nameID 
     601     
     602    def _setNameID(self, value): 
     603        nameID = value 
     604 
     605    def _getEncryptedID(self): 
     606        return self.__encryptedID 
     607     
     608    def _setEncryptedID(self, value):  
     609        self.__encryptedID = value 
     610     
     611    def _getSubjectConfirmations(self):  
     612        return self.__subjectConfirmations 
     613     
     614    def getOrderedChildren(self):  
     615        children = [] 
     616 
     617        if self.baseID is not None: 
     618            children.append(self.baseID) 
     619         
     620        if self.nameID is not None:  
     621            children.append(self.nameID) 
     622         
     623        if self.encryptedID is not None:  
     624            children.append(self.encryptedID) 
     625         
     626        children += self.subjectConfirmations 
     627 
     628        return tuple(children) 
     629 
     630    baseID = property(fget=_getBaseID,  
     631                      fset=_setBaseID,  
     632                      doc="Base identifier") 
     633 
     634    nameID = property(fget=_getNameID,  
     635                      fset=_setNameID,  
     636                      doc="Name identifier") 
     637 
     638    encryptedID = property(fget=_getEncryptedID,  
     639                           fset=_setEncryptedID,  
     640                           doc="EncryptedID's Docstring") 
     641 
     642    subjectConfirmations = property(fget=_getSubjectConfirmations,  
     643                                    doc="Subject Confirmations") 
     644 
     645 
     646class SubjectQuery(SAMLObject): 
     647 
     648    def __init__(self): 
     649        self.__subject = None 
     650         
     651    def _getSubject(self): 
     652        '''Gets the Subject of this request. 
     653         
     654        @return the Subject of this request'''    
     655        return self.__subject 
     656     
     657    def _setSubject(self, value): 
     658        '''Sets the Subject of this request. 
     659         
     660        @param newSubject the Subject of this request''' 
     661        self.__subject = value 
     662         
     663    subject = property(fget=_getSubject, fset=_setSubject, doc="Query subject") 
     664 
     665 
     666class RequestAbstractType(SAMLObject):  
     667    '''SAML 2.0 Core RequestAbstractType''' 
     668     
     669    # Local name of the XSI type. 
     670    TYPE_LOCAL_NAME = "RequestAbstractType" 
     671 
     672    # QName of the XSI type. 
     673    TYPE_NAME = QName(SAMLConstants.SAML20P_NS,  
     674                      TYPE_LOCAL_NAME, 
     675                      SAMLConstants.SAML20P_PREFIX) 
     676 
     677    # ID attribute name. 
     678    ID_ATTRIB_NAME = "ID" 
     679 
     680    # Version attribute name. 
     681    VERSION_ATTRIB_NAME = "Version" 
     682 
     683    # IssueInstant attribute name. 
     684    ISSUE_INSTANT_ATTRIB_NAME = "IssueInstant" 
     685 
     686    # Destination attribute name. 
     687    DESTINATION_ATTRIB_NAME = "Destination" 
     688 
     689    # Consent attribute name. 
     690    CONSENT_ATTRIB_NAME = "Consent" 
     691 
     692    # Unspecified consent URI. 
     693    UNSPECIFIED_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:unspecified" 
     694 
     695    # Obtained consent URI. 
     696    OBTAINED_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:obtained" 
     697 
     698    # Prior consent URI. 
     699    PRIOR_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:prior" 
     700 
     701    # Implicit consent URI. 
     702    IMPLICIT_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:implicit" 
     703 
     704    # Explicit consent URI. 
     705    EXPLICIT_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:explicit" 
     706 
     707    # Unavailable consent URI. 
     708    UNAVAILABLE_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:unavailable" 
     709 
     710    # Inapplicable consent URI. 
     711    INAPPLICABLE_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:inapplicable"  
     712 
     713    def __init__(self): 
     714        # SAML Version of the request.  
     715        self.__version = None 
     716     
     717        # Unique identifier of the request.  
     718        self.__id = None 
     719     
     720        # Date/time request was issued.  
     721        self.__issueInstant = None 
     722     
     723        # URI of the request destination.  
     724        self.__destination = None 
     725     
     726        # URI of the SAML user consent type.  
     727        self.__consent = None 
     728     
     729        # URI of the SAML user consent type.  
     730        self.__issuer = None 
     731     
     732        # Extensions child element.  
     733        self.__extensions = None 
     734         
     735    def _get_version(self): 
     736        '''@return the SAML Version of this assertion. 
     737        ''' 
     738        return self.__version 
     739     
     740    def _set_version(self, version): 
     741        '''@param version the SAML Version of this assertion 
     742        ''' 
     743        if not isinstance(version, SAMLVersion): 
     744            raise TypeError("Expecting SAMLVersion type got: %r" %  
     745                            version.__class__) 
     746         
     747        self.__version = version 
     748         
     749    version = property(fget=_get_version, 
     750                       fset=_set_version, 
     751                       doc="SAML Version of the assertion") 
     752 
     753    def _get_issueInstant(self): 
     754        '''Gets the date/time the request was issued 
     755         
     756        @return the issue instance of this request''' 
     757        return self.__issueInstant 
     758     
     759    def _set_issueInstant(self, value): 
     760        '''Sets the date/time the request was issued 
     761         
     762        @param value the issue instance of this request 
     763        ''' 
     764        if not isinstance(value, datetime): 
     765            raise TypeError('Expecting "datetime" type for "issueInstant", ' 
     766                            'got %r' % type(value)) 
     767             
     768        self.__issueInstant = value 
     769         
     770    issueInstant = property(fget=_get_issueInstant,  
     771                            fset=_set_issueInstant, 
     772                            doc="Issue instant of the request")  
     773 
     774    def _get_id(self): 
     775        '''Sets the unique identifier for this request. 
     776         
     777        @return the ID of this request 
     778        ''' 
     779        return self.__id 
     780     
     781    def _set_id(self, value): 
     782        '''Sets the unique identifier for this request 
     783         
     784        @param newID the ID of this assertion 
     785        ''' 
     786        if not isinstance(value, basestring): 
     787            raise TypeError('Expecting basestring derived type for "id", got ' 
     788                            '%r' % type(value)) 
     789        self.__id = value 
     790         
     791    id = property(fget=_get_id, fset=_set_id, doc="ID of request") 
     792 
     793    def _get_destination(self): 
     794        '''Gets the URI of the destination of the request. 
     795         
     796        @return the URI of the destination of the request 
     797        ''' 
     798        return self.__destination 
     799     
     800    def _set_destination(self, value): 
     801        '''Sets the URI of the destination of the request. 
     802         
     803        @param newDestination the URI of the destination of the request''' 
     804        if not isinstance(value, basestring): 
     805            raise TypeError('Expecting basestring derived type for ' 
     806                            '"destination", got %r' % type(value)) 
     807        self.__destination = value 
     808         
     809    destination = property(fget=_get_issuer,  
     810                           fset=_set_issuer, 
     811                           doc="Destination of request") 
     812      
     813    def _get_consent(self): 
     814        '''Gets the consent obtained from the principal for sending this  
     815        request. 
     816         
     817        @return: the consent obtained from the principal for sending this  
     818        request 
     819        ''' 
     820        return self.__consent 
     821         
     822    def _set_consent(self, value): 
     823        '''Sets the consent obtained from the principal for sending this  
     824        request. 
     825         
     826        @param value: the new consent obtained from the principal for  
     827        sending this request 
     828        '''  
     829        if not isinstance(value, basestring): 
     830            raise TypeError('Expecting basestring derived type for "consent", ' 
     831                            'got %r' % type(value)) 
     832        self.__consent = value 
     833               
     834    consent = property(fget=_get_issuer,  
     835                       fset=_set_issuer, 
     836                       doc="Destination of request") 
     837    
     838    def _set_issuer(self, issuer): 
     839        """Set issuer of request""" 
     840        if not isinstance(issuer, basestring): 
     841            raise TypeError("issuer must be a string, got %r" %  
     842                            issuer.__class__) 
     843         
     844        self.__issuer = issuer 
     845     
     846    def _get_issuer(self): 
     847        """Get the issuer name """ 
     848        return self.__issuer 
     849 
     850    issuer = property(fget=_get_issuer,  
     851                      fset=_set_issuer, 
     852                      doc="Issuer of request") 
     853  
     854    def _get_extensions(self): 
     855        '''Gets the Extensions of this request. 
     856         
     857        @return: the Status of this request 
     858        ''' 
     859        return self.__extensions 
     860       
     861    def _set_extensions(self, value): 
     862        '''Sets the Extensions of this request. 
     863         
     864        @param value: the Extensions of this request 
     865        ''' 
     866        self.__extensions = value 
     867         
     868    extensions = property(fget=_get_extensions,  
     869                          fset=_set_extensions, 
     870                          doc="Request extensions") 
     871     
     872         
     873     
     874class AttributeQuery(SubjectQuery): 
     875    '''SAML 2.0 AttributeQuery.''' 
     876     
     877    # Element local name. 
     878    DEFAULT_ELEMENT_LOCAL_NAME = "AttributeQuery" 
     879 
     880    # Default element name. 
     881    DEFAULT_ELEMENT_NAME = QName(SAMLConstants.SAML20P_NS,  
     882                                 DEFAULT_ELEMENT_LOCAL_NAME, 
     883                                 SAMLConstants.SAML20P_PREFIX) 
     884 
     885    # Local name of the XSI type. 
     886    TYPE_LOCAL_NAME = "AttributeQueryType" 
     887 
     888    # QName of the XSI type. 
     889    TYPE_NAME = QName(SAMLConstants.SAML20P_NS,  
     890                      TYPE_LOCAL_NAME, 
     891                      SAMLConstants.SAML20P_PREFIX) 
     892 
     893    def __init__(self, attributes): 
     894        self.__attributes = attributes 
     895  
     896    def _getAttributes(self): 
     897        '''Gets the Attributes of this query. 
     898         
     899        @return the list of Attributes of this query''' 
     900        return self.__attributes 
     901 
     902    def _setAttributes(self, value): 
     903        self.__attributes = value 
     904 
     905    attributes = property(fget=_getAttributes,  
     906                          fset=_setAttributes,  
     907                          doc="Attributes") 
     908     
     909    def getOrderedChildren(self): 
     910        """TODO: is this required??""" 
     911        raise NotImplementedError() 
     912 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/soap/client.py

    r5527 r5528  
    2323    def _setResponseEnvelopeClass(self, value): 
    2424        if not issubclass(value, SOAPEnvelopeBase): 
    25             raise TypeError("Setting SOAP class: expecting %r, got %r" % 
    26                             (SOAPEnvelopeBase, type(value))) 
     25            raise TypeError("Setting SOAP envelope class: expecting %r, got " 
     26                            "%r" % (SOAPEnvelopeBase, type(value))) 
    2727        self.__responseEnvelopeClass = value 
    2828 
    2929    responseEnvelopeClass = property(fget=_getResponseEnvelopeClass,  
    3030                                     fset=_setResponseEnvelopeClass,  
    31                                      doc="Set the SOAP class for handling " 
    32                                          "requests and responses") 
     31                                     doc="Set the class for handling " 
     32                                         "the SOAP envelope responses") 
    3333      
    3434    def send(self, soapRequest): 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/unit/saml/test_saml.py

    r5513 r5528  
    2121from ndg.security.common.saml import Assertion, Attribute, AttributeValue, \ 
    2222    AttributeStatement, SAMLVersion, XSStringAttributeValue, \ 
    23     XSGroupRoleAttributeValue 
     23    AttributeQuery 
    2424from ndg.security.common.saml.xml import XMLConstants 
    2525from ndg.security.common.saml.xml.etree import AssertionETreeObject, \ 
     
    202202        self.assert_(len(xmlOutput)) 
    203203        print(xmlOutput) 
    204      
     204 
     205    def test02CreateAttributeQuery(self): 
     206        attributeQuery = AttributeQuery() 
    205207 
    206208if __name__ == "__main__": 
Note: See TracChangeset for help on using the changeset viewer.