Changeset 5588


Ignore:
Timestamp:
07/08/09 14:39:46 (10 years ago)
Author:
pjkersha
Message:

Working SAML unit test with AttributeQuery? parsing. Added SAML response classes

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

Legend:

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

    r5554 r5588  
    128128        super(Assertion, self).__init__() 
    129129         
    130         self._version = None 
    131         self._issueInstant = None 
    132         self._id = None 
    133         self._issuer = None 
    134         self._subject = None 
    135         self._conditions = [] 
    136         self._advice = None 
    137         self._statements = [] 
    138         self._authnStatements = [] 
    139         self._authzDecisionStatements = [] 
    140         self._attributeStatements = [] 
     130        self.__version = None 
     131        self.__issueInstant = None 
     132        self.__id = None 
     133        self.__issuer = None 
     134        self.__subject = None 
     135        self.__conditions = [] 
     136        self.__advice = None 
     137        self.__statements = [] 
     138        self.__authnStatements = [] 
     139        self.__authzDecisionStatements = [] 
     140        self.__attributeStatements = [] 
    141141         
    142142    def _get_version(self): 
    143143        '''@return the SAML Version of this assertion. 
    144144        ''' 
    145         return self._version 
     145        return self.__version 
    146146     
    147147    def _set_version(self, version): 
     
    152152                            version.__class__) 
    153153         
    154         self._version = version 
     154        self.__version = version 
    155155         
    156156    version = property(fget=_get_version, 
     
    162162         
    163163        @return the issue instance of this assertion''' 
    164         return self._issueInstant 
     164        return self.__issueInstant 
    165165     
    166166    def _set_issueInstant(self, issueInstant): 
     
    173173                            'got %r' % issueInstant.__class__) 
    174174             
    175         self._issueInstant = issueInstant 
     175        self.__issueInstant = issueInstant 
    176176         
    177177    issueInstant = property(fget=_get_issueInstant,  
     
    184184        @return the ID of this assertion 
    185185        ''' 
    186         return self._id 
     186        return self.__id 
    187187     
    188188    def _set_id(self, _id): 
     
    194194            raise TypeError('Expecting basestring derived type for "id", got ' 
    195195                            '%r' % _id.__class__) 
    196         self._id = _id 
     196        self.__id = _id 
    197197         
    198198    id = property(fget=_get_id, fset=_set_id, doc="ID of assertion") 
    199  
    200199     
    201200    def _set_issuer(self, issuer): 
     
    205204                            issuer.__class__) 
    206205         
    207         self._issuer = issuer 
     206        self.__issuer = issuer 
    208207     
    209208    def _get_issuer(self): 
    210209        """Get the issuer name """ 
    211         return self._issuer 
     210        return self.__issuer 
    212211 
    213212    issuer = property(fget=_get_issuer,  
     
    215214                      doc="Issuer of assertion") 
    216215     
    217  
    218216    def _set_subject(self, subject): 
    219217        """Set subject string.""" 
     
    222220                            subject.__class__) 
    223221 
    224         self._subject = subject 
     222        self.__subject = subject 
    225223     
    226224    def _get_subject(self): 
    227225        """Get subject string.""" 
    228         return self._subject 
     226        return self.__subject 
    229227 
    230228    subject = property(fget=_get_subject, 
     
    237235            raise TypeError("conditions must be a string") 
    238236 
    239         self._conditions = list(conditions) 
     237        self.__conditions = list(conditions) 
    240238     
    241239    def _get_conditions(self): 
    242240        """Get conditions string.""" 
    243         return self._conditions 
     241        return self.__conditions 
    244242 
    245243    conditions = property(fget=_get_conditions, 
     
    252250            raise TypeError("advice must be a string") 
    253251 
    254         self._advice = advice 
     252        self.__advice = advice 
    255253     
    256254    def _get_advice(self): 
    257255        """Get advice string.""" 
    258         return self._advice 
     256        return self.__advice 
    259257 
    260258    advice = property(fget=_get_advice, 
     
    267265            raise TypeError("statements must be a list/tuple.") 
    268266 
    269         self._statements = list(statements) 
     267        self.__statements = list(statements) 
    270268     
    271269    def _get_statements(self): 
    272270        """Get statements string.""" 
    273         return self._statements 
     271        return self.__statements 
    274272 
    275273    statements = property(fget=_get_statements, 
     
    282280            raise TypeError("authnStatements must be a list/tuple") 
    283281 
    284         self._authnStatements = list(authnStatements) 
     282        self.__authnStatements = list(authnStatements) 
    285283     
    286284    def _get_authnStatements(self): 
    287285        """Get authnStatements string.""" 
    288         return self._authnStatements 
     286        return self.__authnStatements 
    289287 
    290288    authnStatements = property(fget=_get_authnStatements, 
     
    299297                            "list/tuple") 
    300298 
    301         self._authzDecisionStatements = list(authzDecisionStatements) 
     299        self.__authzDecisionStatements = list(authzDecisionStatements) 
    302300     
    303301    def _get_authzDecisionStatements(self): 
    304302        """Get authorisation decision statements.""" 
    305         return self._authzDecisionStatements 
     303        return self.__authzDecisionStatements 
    306304 
    307305    authzDecisionStatements = property(fget=_get_authzDecisionStatements, 
     
    316314            raise TypeError("attributeStatements must be a list/tuple") 
    317315 
    318         self._attributeStatements = list(attributeStatements) 
     316        self.__attributeStatements = list(attributeStatements) 
    319317     
    320318    def _get_attributeStatements(self): 
    321319        """Get attributeStatements string.""" 
    322         return self._attributeStatements 
     320        return self.__attributeStatements 
    323321 
    324322    attributeStatements = property(fget=_get_attributeStatements, 
     
    10951093 
    10961094 
     1095class StatusResponseType(SAMLObject): 
     1096    '''SAML 2.0 Core Status Response Type 
     1097    ''' 
     1098 
     1099    # Local name of the XSI type. 
     1100    TYPE_LOCAL_NAME = "StatusResponseType" 
     1101 
     1102    # QName of the XSI type. 
     1103    TYPE_NAME = QName(SAMLConstants.SAML20P_NS,  
     1104                      TYPE_LOCAL_NAME, 
     1105                      SAMLConstants.SAML20P_PREFIX) 
     1106 
     1107    # ID attribute name 
     1108    ID_ATTRIB_NAME = "ID" 
     1109 
     1110    # InResponseTo attribute name 
     1111    IN_RESPONSE_TO_ATTRIB_NAME = "InResponseTo" 
     1112 
     1113    # Version attribute name 
     1114    VERSION_ATTRIB_NAME = "Version" 
     1115 
     1116    # IssueInstant attribute name 
     1117    ISSUE_INSTANT_ATTRIB_NAME = "IssueInstant" 
     1118 
     1119    # Destination attribute name 
     1120    DESTINATION_ATTRIB_NAME = "Destination" 
     1121 
     1122    # Consent attribute name. 
     1123    CONSENT_ATTRIB_NAME = "Consent" 
     1124 
     1125    # Unspecified consent URI 
     1126    UNSPECIFIED_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:unspecified" 
     1127 
     1128    # Obtained consent URI 
     1129    OBTAINED_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:obtained" 
     1130 
     1131    # Prior consent URI 
     1132    PRIOR_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:prior" 
     1133 
     1134    # Implicit consent URI 
     1135    IMPLICIT_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:implicit" 
     1136 
     1137    # Explicit consent URI 
     1138    EXPLICIT_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:explicit" 
     1139 
     1140    # Unavailable consent URI 
     1141    UNAVAILABLE_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:unavailable" 
     1142 
     1143    # Inapplicable consent URI 
     1144    INAPPLICABLE_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:inapplicable" 
     1145 
     1146    def __init__(self): 
     1147        self.__qname = None 
     1148        self.__version = SAMLVersion(SAMLVersion.VERSION_20) 
     1149        self.__id = None 
     1150        self.__inResponseTo = None 
     1151        self.__issueInstant = None 
     1152        self.__destination = None 
     1153        self.__consent = None 
     1154        self.__issuer = None 
     1155        self.__status = None 
     1156        self.__extensions = None 
     1157         
     1158    def _getQName(self): 
     1159        return self.__qname 
     1160         
     1161    def _setQName(self, value): 
     1162        if not isinstance(value, QName): 
     1163            raise TypeError("\"qname\" must be a %r derived type, " 
     1164                            "got %r" % (QName, type(value))) 
     1165             
     1166        self.__qname = value 
     1167 
     1168    qname = property(fget=_getQName, fset=_setQName, doc="qualified name") 
     1169 
     1170    def _get_version(self): 
     1171        '''@return the SAML Version of this response. 
     1172        ''' 
     1173        return self.__version 
     1174     
     1175    def _set_version(self, version): 
     1176        '''@param version the SAML Version of this response 
     1177        ''' 
     1178        if not isinstance(version, SAMLVersion): 
     1179            raise TypeError("Expecting SAMLVersion type got: %r" %  
     1180                            version.__class__) 
     1181         
     1182        self.__version = version 
     1183        
     1184    version = property(fget=_get_version, 
     1185                       fset=_set_version, 
     1186                       doc="SAML Version of the response") 
     1187 
     1188    def _get_id(self): 
     1189        '''Sets the ID of this response. 
     1190         
     1191        @return the ID of this response 
     1192        ''' 
     1193        return self.__id 
     1194     
     1195    def _set_id(self, value): 
     1196        '''Sets the ID of this response. 
     1197         
     1198        @param value: the ID of this response 
     1199        ''' 
     1200        if not isinstance(value, basestring): 
     1201            raise TypeError('Expecting basestring derived type for "id", got ' 
     1202                            '%r' % type(value)) 
     1203        self.__id = value 
     1204         
     1205    id = property(fget=_get_id, fset=_set_id, doc="ID of response") 
     1206 
     1207    def _getInResponseTo(self): 
     1208        '''Get the unique request identifier for which this is a response 
     1209         
     1210        @return value: the unique identifier of the originating  
     1211        request 
     1212        ''' 
     1213        return self.__inResponseTo 
     1214     
     1215    def _setInResponseTo(self, value): 
     1216        '''Set the unique request identifier for which this is a response 
     1217         
     1218        @param value: the unique identifier of the originating  
     1219        request 
     1220        ''' 
     1221        self.__inResponseTo = value 
     1222         
     1223    inResponseTo = property(fget=_getInResponseTo,  
     1224                            fset=_setInResponseTo, 
     1225                            doc="unique request identifier for which this is " 
     1226                                "a response") 
     1227 
     1228    def _get_issueInstant(self): 
     1229        '''Gets the issue instance of this response. 
     1230         
     1231        @return the issue instance of this response''' 
     1232        return self.__issueInstant 
     1233     
     1234    def _set_issueInstant(self, issueInstant): 
     1235        '''Sets the issue instance of this response. 
     1236         
     1237        @param newIssueInstance the issue instance of this response 
     1238        ''' 
     1239        if not isinstance(issueInstant, datetime): 
     1240            raise TypeError('Expecting "datetime" type for "issueInstant", ' 
     1241                            'got %r' % issueInstant.__class__) 
     1242             
     1243        self.__issueInstant = issueInstant 
     1244         
     1245    issueInstant = property(fget=_get_issueInstant,  
     1246                            fset=_set_issueInstant, 
     1247                            doc="Issue instant of the response") 
     1248 
     1249    def _get_destination(self): 
     1250        '''Gets the URI of the destination of the response. 
     1251         
     1252        @return the URI of the destination of the response 
     1253        ''' 
     1254        return self.__destination 
     1255     
     1256    def _set_destination(self, value): 
     1257        '''Sets the URI of the destination of the response. 
     1258         
     1259        @param value: the URI of the destination of the response''' 
     1260        if not isinstance(value, basestring): 
     1261            raise TypeError('Expecting basestring derived type for ' 
     1262                            '"destination", got %r' % type(value)) 
     1263        self.__destination = value 
     1264         
     1265    destination = property(fget=_get_destination,  
     1266                           fset=_set_destination, 
     1267                           doc="Destination of response") 
     1268      
     1269    def _get_consent(self): 
     1270        '''Gets the consent obtained from the principal for sending this  
     1271        response. 
     1272         
     1273        @return: the consent obtained from the principal for sending this  
     1274        response 
     1275        ''' 
     1276        return self.__consent 
     1277         
     1278    def _set_consent(self, value): 
     1279        '''Sets the consent obtained from the principal for sending this  
     1280        response. 
     1281         
     1282        @param value: the new consent obtained from the principal for  
     1283        sending this response 
     1284        '''  
     1285        if not isinstance(value, basestring): 
     1286            raise TypeError('Expecting basestring derived type for "consent", ' 
     1287                            'got %r' % type(value)) 
     1288        self.__consent = value 
     1289               
     1290    consent = property(fget=_get_consent,  
     1291                       fset=_set_consent, 
     1292                       doc="Consent for response") 
     1293     
     1294    def _set_issuer(self, issuer): 
     1295        """Set issuer""" 
     1296        if not isinstance(issuer, basestring): 
     1297            raise TypeError("issuer must be a string, got %r" %  
     1298                            issuer.__class__) 
     1299         
     1300        self.__issuer = issuer 
     1301     
     1302    def _get_issuer(self): 
     1303        """Get the issuer name """ 
     1304        return self.__issuer 
     1305 
     1306    issuer = property(fget=_get_issuer,  
     1307                      fset=_set_issuer, 
     1308                      doc="Issuer of response") 
     1309     
     1310    def _getStatus(self, value): 
     1311        '''Gets the Status of this response. 
     1312         
     1313        @return the Status of this response 
     1314        ''' 
     1315        return self.__status 
     1316 
     1317    def _setStatus(self, value): 
     1318        '''Sets the Status of this response. 
     1319         
     1320        @param newStatus the Status of this response 
     1321        ''' 
     1322        self.__status = value 
     1323         
     1324    def _get_extensions(self): 
     1325        '''Gets the Extensions of this response. 
     1326         
     1327        @return: the Status of this response 
     1328        ''' 
     1329        return self.__extensions 
     1330       
     1331    def _set_extensions(self, value): 
     1332        '''Sets the Extensions of this response. 
     1333         
     1334        @param value: the Extensions of this response 
     1335        ''' 
     1336        self.__extensions = value 
     1337         
     1338    extensions = property(fget=_get_extensions,  
     1339                          fset=_set_extensions, 
     1340                          doc="Response extensions")     
     1341 
     1342 
     1343class Response(StatusResponseType): 
     1344    '''SAML2 Core Response''' 
     1345     
     1346    # Element local name. 
     1347    DEFAULT_ELEMENT_LOCAL_NAME = "Response" 
     1348     
     1349    # Default element name. 
     1350    DEFAULT_ELEMENT_NAME = QName(SAMLConstants.SAML20P_NS,  
     1351                                 DEFAULT_ELEMENT_LOCAL_NAME,  
     1352                                 SAMLConstants.SAML20P_PREFIX) 
     1353     
     1354    # Local name of the XSI type. 
     1355    TYPE_LOCAL_NAME = "ResponseType" 
     1356         
     1357    # QName of the XSI type. 
     1358    TYPE_NAME = QName(SAMLConstants.SAML20P_NS,  
     1359                      TYPE_LOCAL_NAME,  
     1360                      SAMLConstants.SAML20P_PREFIX) 
     1361     
     1362    def __init__(self): 
     1363        ''''''  
     1364        super(Response, self).__init__() 
     1365         
     1366        # Assertion child elements 
     1367        self.__indexedChildren = [] 
     1368     
     1369    def _getAssertions(self):  
     1370        return self.__indexedChildren 
     1371     
     1372    assertions = property(fget=_getAssertions, 
     1373                          doc="Assertions contained in this response") 
     1374 
     1375 
    10971376class SubjectQuery(RequestAbstractType): 
    10981377 
     
    11531432                          fset=_setAttributes,  
    11541433                          doc="Attributes") 
    1155      
    1156     def getOrderedChildren(self): 
    1157         """TODO: is this required??""" 
    1158         raise NotImplementedError() 
    1159  
     1434 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/saml/xml/etree.py

    r5560 r5588  
    237237                                        **attributeValueElementTreeFactoryKw) 
    238238     
    239             attributeValue = factory(attributeValueTypeId) 
     239            attributeValueElementTreeClass = factory(attributeValueTypeId) 
     240            attributeValue = attributeValueElementTreeClass.parse(childElem) 
    240241            attribute.attributeValues.append(attributeValue) 
    241242         
     
    311312            raise XMLObjectParseError("No \"%s\" element found" % 
    312313                            XSStringAttributeValue.DEFAULT_ELEMENT_LOCAL_NAME) 
    313              
    314         typeAttributeName = "%s:%s" % (SAMLConstants.XSI_PREFIX, 'type') 
    315         type = elem.attrib.get(typeAttributeName) 
    316         if type != XSStringAttributeValue.TYPE_LOCAL_NAME: 
     314         
     315        # Parse the attribute type checking that it is set to the expected  
     316        # string type 
     317        typeQName = QName(SAMLConstants.XSI_NS, tag='type') 
     318         
     319        typeValue = elem.attrib.get(str(typeQName), '') 
     320        typeValueLocalName = typeValue.split(':')[-1] 
     321        if typeValueLocalName != XSStringAttributeValue.TYPE_LOCAL_NAME: 
    317322            raise XMLObjectParseError('Expecting "%s" type; got "%s"' % 
    318                                     (XSStringAttributeValue.TYPE_LOCAL_NAME, 
    319                                      type)) 
    320              
     323                                      (XSStringAttributeValue.TYPE_LOCAL_NAME, 
     324                                       type)) 
     325         
     326        # Update namespace map as an XSI type has been referenced.  This will 
     327        # ensure the correct prefix is applied if it re-serialised. 
     328        ElementTree._namespace_map[SAMLConstants.XSI_NS 
     329                                   ] = SAMLConstants.XSI_PREFIX 
     330                                       
    321331        attributeValue = XSStringAttributeValue() 
    322         attributeValue.value = elem.text.strip() 
     332        if elem.text is not None: 
     333            attributeValue.value = elem.text.strip() 
    323334 
    324335        return attributeValue 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/integration/authz/securityservices.ini

    r5447 r5588  
    153153port = %(portNum)s 
    154154 
    155 [filter-app:OpenIDProviderApp] 
     155[filter-app:OpenIDProviderFilterApp] 
    156156use = egg:Paste#httpexceptions 
    157157next = cascade 
     
    162162use = egg:Paste#cascade 
    163163app1 = OpenIDProviderStaticContent 
    164 app2 = OpenIDProviderMiddlewareApp 
     164app2 = OpenIDProviderApp 
    165165catch = 404 
    166166 
     
    263263#______________________________________________________________________________ 
    264264# OpenID Provider WSGI Settings 
    265 [app:OpenIDProviderMiddlewareApp] 
     265[app:OpenIDProviderApp] 
    266266paste.app_factory=ndg.security.server.wsgi.openid.provider:OpenIDProviderMiddleware.app_factory 
    267267openid.provider.path.openidserver=/OpenID/Provider/server 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/integration/authz_lite/securityservices.ini

    r5555 r5588  
    6666port = %(portNum)s 
    6767 
    68 [filter-app:OpenIDProviderApp] 
     68[filter-app:OpenIDProviderFilterApp] 
    6969use = egg:Paste#httpexceptions 
    7070next = cascade 
     
    7575use = egg:Paste#cascade 
    7676app1 = OpenIDProviderStaticContent 
    77 app2 = OpenIDProviderMiddlewareApp 
     77app2 = OpenIDProviderApp 
    7878catch = 404 
    7979 
     
    166166#______________________________________________________________________________ 
    167167# OpenID Provider WSGI Settings 
    168 [app:OpenIDProviderMiddlewareApp] 
     168[app:OpenIDProviderApp] 
    169169paste.app_factory=ndg.security.server.wsgi.openid.provider:OpenIDProviderMiddleware.app_factory 
    170170 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/integration/openid/securityservices.ini

    r5181 r5588  
    149149port = %(portNum)s 
    150150 
    151 [filter-app:OpenIDProviderApp] 
     151[filter-app:OpenIDProviderFilterApp] 
    152152use = egg:Paste#httpexceptions 
    153153next = cascade 
     
    158158use = egg:Paste#cascade 
    159159app1 = OpenIDProviderStaticContent 
    160 app2 = OpenIDProviderMiddlewareApp 
     160app2 = OpenIDProviderApp 
    161161catch = 404 
    162162 
     
    231231#______________________________________________________________________________ 
    232232# OpenID Provider WSGI Settings 
    233 [app:OpenIDProviderMiddlewareApp] 
     233[app:OpenIDProviderApp] 
    234234paste.app_factory=ndg.security.server.wsgi.openid.provider:OpenIDProviderMiddleware.app_factory 
    235235openid.provider.path.openidserver=/OpenID/Provider/server 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/integration/openidprovider/securityservices.ini

    r5181 r5588  
    147147port = %(portNum)s 
    148148 
    149 [filter-app:OpenIDProviderApp] 
     149[filter-app:OpenIDProviderFilterApp] 
    150150use = egg:Paste#httpexceptions 
    151151next = cascade 
     
    156156use = egg:Paste#cascade 
    157157app1 = OpenIDProviderStaticContent 
    158 app2 = OpenIDProviderMiddlewareApp 
     158app2 = OpenIDProviderApp 
    159159catch = 404 
    160160 
     
    169169           wsseSignatureFilter  
    170170                   SessionMiddlewareFilter 
    171                    OpenIDProviderApp 
     171                   OpenIDProviderFilterApp 
    172172 
    173173#______________________________________________________________________________ 
     
    186186#______________________________________________________________________________ 
    187187# OpenID Provider WSGI Settings 
    188 [app:OpenIDProviderMiddlewareApp] 
     188[app:OpenIDProviderApp] 
    189189paste.app_factory=ndg.security.server.wsgi.openid.provider:OpenIDProviderMiddleware.app_factory 
    190190#openid.provider.path.openidserver=/openidserver 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/integration/openidrelyingparty_withapp/securityservices.ini

    r5555 r5588  
    6666port = %(portNum)s 
    6767 
    68 [filter-app:OpenIDProviderApp] 
     68[filter-app:OpenIDProviderFilterApp] 
    6969use = egg:Paste#httpexceptions 
    7070next = cascade 
     
    7575use = egg:Paste#cascade 
    7676app1 = OpenIDProviderStaticContent 
    77 app2 = OpenIDProviderMiddlewareApp 
     77app2 = OpenIDProviderApp 
    7878catch = 404 
    7979 
     
    8787           wsseSignatureFilter  
    8888                   SessionMiddlewareFilter 
    89                    OpenIDProviderApp 
     89                   OpenIDProviderFilterApp 
    9090 
    9191#______________________________________________________________________________ 
     
    113113#______________________________________________________________________________ 
    114114# OpenID Provider WSGI Settings 
    115 [app:OpenIDProviderMiddlewareApp] 
     115[app:OpenIDProviderApp] 
    116116paste.app_factory=ndg.security.server.wsgi.openid.provider:OpenIDProviderMiddleware.app_factory 
    117117 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/unit/attributeauthority/saml/test_samlinterface.py

    r5560 r5588  
    3030 
    3131 
    32 class SamlSoapBindingMiddleware(object): 
     32class SamlSoapBindingApp(object): 
     33    def __init__(self): 
     34        self.firstName = "Philip" 
     35        self.lastName = "Kershaw" 
     36        self.emailAddress = "pkershaw@somewhere.ac.uk" 
     37                   
    3338    def __call__(self, environ, start_response): 
    3439        soapRequestStream = environ['wsgi.input'] 
    3540        soapRequest = SOAPEnvelope() 
    3641        soapRequest.parse(soapRequestStream) 
    37         print "Received request from client:\n" 
     42        attributeQueryElem = soapRequest.body.elem[0] 
     43        attributeQuery = AttributeQueryElementTree.parse(attributeQueryElem) 
     44         
     45        print("Received request from client:\n") 
    3846        print soapRequest.prettyPrint() 
    3947         
     48        assertion = Assertion() 
     49        assertion.version = SAMLVersion(SAMLVersion.VERSION_20) 
     50        assertion.id = str(uuid4()) 
     51        assertion.issueInstant = datetime.utcnow() 
     52        assertion.attributeStatements.append(AttributeStatement()) 
     53          
     54        for attribute in attributeQuery.attributes: 
     55            if attribute.name == "urn:esg:first:name": 
     56                # special case handling for 'FirstName' attribute 
     57                fnAttribute = Attribute() 
     58                fnAttribute.name = attribute.name 
     59                fnAttribute.nameFormat = attribute.nameFormat 
     60                fnAttribute.friendlyName = attribute.friendlyName 
     61     
     62                firstName = XSStringAttributeValue() 
     63                firstName.value = self.firstName 
     64                fnAttribute.attributeValues.append(firstName) 
     65     
     66                attributes.append(fnAttribute) 
     67             
     68            elif attribute.name == "urn:esg:last:name": 
     69                lnAttribute = Attribute() 
     70                lnAttribute.name = attribute.name 
     71                lnAttribute.nameFormat = attribute.nameFormat 
     72                lnAttribute.friendlyName = attribute.friendlyName 
     73     
     74                lastName = XSStringAttributeValue() 
     75                lastName.value = self.lastName 
     76                lnAttribute.attributeValues.append(lastName) 
     77     
     78                attributes.append(lnAttribute) 
     79                
     80            elif attribute.name == "urn:esg:email:address": 
     81                emailAddressAttribute = Attribute() 
     82                emailAddressAttribute.name = attribute.name 
     83                emailAddressAttribute.nameFormat = attribute.nameFormat 
     84                emailAddressAttribute.friendlyName = attribute.friendlyName 
     85     
     86                emailAddress = XSStringAttributeValue() 
     87                emailAddress.value = self.emailAddress 
     88                emailAddressAttribute.attributeValues.append(emailAddress) 
     89     
     90                attributes.append(emailAddressAttribute) 
     91                 
     92            assertion.attributeStatements[0].attributes.append(attribute) 
     93             
    4094        soapResponse = SOAPEnvelope() 
    4195        soapResponse.create() 
     
    52106 
    53107    def __init__(self, *args, **kwargs): 
    54         wsgiApp = SamlSoapBindingMiddleware() 
     108        wsgiApp = SamlSoapBindingApp() 
    55109        self.app = paste.fixture.TestApp(wsgiApp) 
    56110          
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/unit/saml/test_saml.py

    r5560 r5588  
    264264         
    265265        attributeQuery2 = AttributeQueryElementTree.parse(elem2) 
     266        self.assert_(attributeQuery2.id == attributeQuery.id) 
     267        self.assert_(attributeQuery2.issuer.value==attributeQuery.issuer.value) 
     268        self.assert_(attributeQuery2.subject.nameID.value == \ 
     269                     attributeQuery.nameID.value) 
     270         
     271        self.assert_(attributeQuery2.attributes[1].name == \ 
     272                     attributeQuery.attributes[1].name) 
     273         
    266274        xmlOutput2 = AttributeQueryElementTree.serialize(elem2) 
    267275        print(xmlOutput2) 
    268         # FIXME self.assert_(xmlOutput == xmlOutput2) 
     276 
    269277         
    270278         
Note: See TracChangeset for help on using the changeset viewer.