def test01(self): """Metadata association add""" idp = self.getIdpServer() wsp = self.getWspServer() wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login( wsp, idp, 1, {}) service_map = {} svcMDID = self.metadataRegister(wsp, idp, wsp_session_dump, service_types=(lasso.PP11_HREF, ), address=spSoapEndpoint, abstract='My first PP service', services_map=service_map) # Make the request wsp_disco = lasso.IdWsf2Discovery(wsp) wsp_disco.setEpr(dst_epr) wsp_disco.initMetadataAssociationAdd() wsp_disco.svcmdids = (svcMDID, ) wsp_disco.buildRequestMsg() # Receive it idp_disco = lasso.IdWsf2Discovery(idp) idp_disco.processRequestMsg(wsp_disco.msgBody) idp_disco.checkSecurityMechanism() self.failUnlessEqual(idp_disco.svcmdids, (svcMDID, )) sender = idp_disco.getSoapEnvelopeRequest().sb2GetProviderId() name_identifier = idp_disco.getNameIdentifier() # Store the association self.failUnless(sender is not None) self.failUnless(name_identifier is not None) idp_disco.validateRequest() idp_disco.buildResponseMsg() wsp_disco.processResponseMsg(idp_disco.msgBody)
def addAssociation(self, wsp, idp, session_dump, svcmdid, service_maps, federations, service_associations): self.failUnless(isinstance(service_associations, dict)) self.failUnless(isinstance(service_maps, dict)) # Get the bootstrap session = lasso.Session.newFromDump(session_dump) assertion = session.getAssertion(idp.providerId) self.failUnless(assertion is not None) epr = assertion.idwsf2GetDiscoveryBootstrapEpr() self.failUnless(epr is not None) wsp_disco = lasso.IdWsf2Discovery(wsp) wsp_disco.setEpr(epr) wsp_disco.initMetadataAssociationAdd() wsp_disco.svcmdids = (svcmdid, ) wsp_disco.buildRequestMsg() # Handle request idp_disco = lasso.IdWsf2Discovery(idp) idp_disco.processRequestMsg(wsp_disco.msgBody) idp_disco.checkSecurityMechanism() self.failUnlessEqual(idp_disco.svcmdids, (svcmdid, )) sender = idp_disco.getSoapEnvelopeRequest().sb2GetProviderId() name_identifier = idp_disco.getNameIdentifier() f = self.nid2tuple(name_identifier) uid = federations[f] l = service_associations.get(uid, []) for id in idp_disco.svcmdids: # check it exists self.failUnless(service_maps.get(id) is not None) # create association if id not in l: l.append(id) service_associations[uid] = l idp_disco.validateRequest() idp_disco.buildResponseMsg() wsp_disco.processResponseMsg(idp_disco.msgBody)
def test01(self): """Discovery Service Query""" idp = self.getIdpServer() wsp = self.getWspServer() wsc = self.getWscServer() federations = {} # Register the service, add an association wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, wsp_dst_epr = self.login(wsp, idp, 1, federations) service_maps = {} svcMDID = self.metadataRegister(wsp, idp, wsp_session_dump, service_types = (lasso.PP11_HREF,), address = spSoapEndpoint, abstract = 'My first PP service', services_map = service_maps) service_associations = {} self.addAssociation(wsp, idp, wsp_session_dump, svcMDID, service_maps, federations, service_associations) # Try to find the service wsc_identity_dump, wsc_session_dump, idp_identity_dump, idp_session_dump, wsc_dst_epr = self.login(wsc, idp, 1, federations, idp_identity_dump = idp_identity_dump, idp_session_dump = idp_session_dump) wsc_disco = lasso.IdWsf2Discovery(wsc) wsc_disco.setEpr(wsc_dst_epr) wsc_disco.initQuery() wsc_disco.addRequestedService(service_types = (lasso.PP11_HREF,)) wsc_disco.buildRequestMsg() idp_disco = lasso.IdWsf2Discovery(idp) idp_disco.setIdentityFromDump(idp_identity_dump) idp_disco.processRequestMsg(wsc_disco.msgBody) f = self.nid2tuple(idp_disco.getNameIdentifier()) uid = federations[f] for id in service_associations[uid]: idp_disco.addServiceMetadata(service_maps[id]) idp_disco.validateRequest() idp_disco.buildResponseMsg() wsc_disco.processResponseMsg(idp_disco.msgBody) self.failUnlessEqual(len(wsc_disco.endpointReferences), 1)
def test05(self): """Test metadata delete""" idp = self.getIdpServer() wsp = self.getWspServer() wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login(wsp, idp, 1, {}) service_map = {} self.metadataRegister(wsp, idp, wsp_session_dump, service_types = (lasso.PP11_HREF,), address = spSoapEndpoint, abstract = 'My first PP service', services_map = service_map) self.metadataRegister(wsp, idp, wsp_session_dump, service_types = (lasso.PP11_HREF,), address = spSoapEndpoint+'2', abstract = 'My second PP service', services_map = service_map) wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login(wsp, idp, 1, {}) wsp_disco = lasso.IdWsf2Discovery(wsp) wsp_disco.setEpr(dst_epr) wsp_disco.initMetadataDelete() svcmdids = tuple(service_map[wsp.providerId]) wsp_disco.setSvcmdids(svcmdids) wsp_disco.buildRequestMsg() idp_disco = lasso.IdWsf2Discovery(idp) idp_disco.processRequestMsg(wsp_disco.msgBody) idp_disco.checkSecurityMechanism() self.failUnlessEqual(idp_disco.svcmdids, svcmdids) sender = idp_disco.getSoapEnvelopeRequest().sb2GetProviderId() self.failUnlessEqual(sender, wsp.providerId) idp_disco.validateRequest() idp_disco.buildResponseMsg() wsp_disco.processResponseMsg(idp_disco.msgBody)
def test04(self): """Test metadata query""" idp = self.getIdpServer() wsp = self.getWspServer() federations = {} wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login(wsp, idp, 1, federations) service_map = {} self.metadataRegister(wsp, idp, wsp_session_dump, service_types = (lasso.PP11_HREF,), address = spSoapEndpoint, abstract = 'My first PP service', services_map = service_map) self.metadataRegister(wsp, idp, wsp_session_dump, service_types = (lasso.PP11_HREF,), address = spSoapEndpoint+'2', abstract = 'My second PP service', services_map = service_map) wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login(wsp, idp, 1, federations) wsp_disco = lasso.IdWsf2Discovery(wsp) wsp_disco.setEpr(dst_epr) wsp_disco.initMetadataQuery() wsp_disco.buildRequestMsg() idp_disco = lasso.IdWsf2Discovery(idp) idp_disco.processRequestMsg(wsp_disco.msgBody) idp_disco.checkSecurityMechanism() self.failUnlessEqual(idp_disco.svcmdids, ()) sender = idp_disco.getSoapEnvelopeRequest().sb2GetProviderId() for svcMDID in service_map.get(sender, []): idp_disco.addServiceMetadata(service_map.get(svcMDID)) idp_disco.validateRequest() idp_disco.buildResponseMsg() wsp_disco.processResponseMsg(idp_disco.msgBody) self.failUnless(len(wsp_disco.metadatas), 2)
def test03(self): """Test metadata register with redirection""" idp = self.getIdpServer() wsp = self.getWspServer() wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login(wsp, idp, 1, {}) wsp_disco = lasso.IdWsf2Discovery(wsp) wsp_disco.setEpr(dst_epr) abstract = 'Personal Profile service' wsp_disco.initMetadataRegister() soap_envelope = wsp_disco.getSoapEnvelopeRequest() soap_envelope.setSb2UserInteractionHint(lasso.IDWSF2_SB2_USER_INTERACTION_HINT_INTERACT_IF_NEEDED) self.failUnless(isinstance(soap_envelope.header, lasso.SoapHeader)) self.failUnless(len(soap_envelope.header.other) > 0) self.failUnlessEqual(soap_envelope.getSb2UserInteractionHint(), lasso.IDWSF2_SB2_USER_INTERACTION_HINT_INTERACT_IF_NEEDED) self.failUnless(wsp_disco.request is not None) wsp_disco.addSimpleServiceMetadata(service_types = (lasso.PP11_HREF,), abstract = abstract, provider_id = wsp.providerId, address = spSoapEndpoint, security_mechanisms = (lasso.SECURITY_MECH_BEARER,)) self.failUnlessEqual(len(wsp_disco.metadatas), 1) metadata = wsp_disco.metadatas[0] self.failUnlessEqual(metadata.abstract, abstract) self.failUnlessEqual(metadata.providerId, wsp.providerId) self.failUnlessEqual(len(metadata.serviceContext), 1) self.failUnlessEqual(len(metadata.serviceContext[0].serviceType), 1) self.failUnlessEqual(metadata.serviceContext[0].serviceType[0], lasso.PP11_HREF) self.failUnlessEqual(len(metadata.serviceContext[0].endpointContext), 1) self.failUnlessEqual( len(metadata.serviceContext[0].endpointContext[0].address), 1) self.failUnlessEqual(metadata.serviceContext[0].endpointContext[0].address[0], spSoapEndpoint) self.failUnlessEqual( len(metadata.serviceContext[0].endpointContext[0].securityMechId), 1) self.failUnlessEqual( metadata.serviceContext[0].endpointContext[0].securityMechId[0], lasso.SECURITY_MECH_BEARER) self.failUnless(metadata.svcMDID is None) wsp_disco.buildRequestMsg() self.failUnlessEqual(wsp_disco.msgUrl, idpSoapEndpoint) self.failUnless(wsp_disco.msgBody is not None) idp_disco = lasso.IdWsf2Discovery(idp) self.failUnless(idp_disco is not None) idp_disco.processRequestMsg(wsp_disco.msgBody) self.failUnless(idp_disco.request is not None) self.failUnlessEqual(len(idp_disco.request.svcMD), 1) self.failUnless(idp_disco.request.svcMD[0].svcMDID is None) soap_envelope = idp_disco.getSoapEnvelopeRequest() self.failUnless(soap_envelope is not None) self.failUnless(soap_envelope.getMessageId() is not None) try: idp_disco.checkSecurityMechanism() except lasso.Error, e: self.fail(e)
def test01(self): """Test metadata registration on the IdP""" idp = self.getIdpServer() wsp = self.getWspServer() wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login( wsp, idp, 1, {}) wsp_disco = lasso.IdWsf2Discovery(wsp) wsp_disco.setEpr(dst_epr) abstract = 'Personal Profile service' wsp_disco.initMetadataRegister() self.failUnless(wsp_disco.request is not None) wsp_disco.addSimpleServiceMetadata( service_types=(lasso.PP11_HREF, ), abstract=abstract, provider_id=wsp.providerId, address=spSoapEndpoint, security_mechanisms=(lasso.SECURITY_MECH_BEARER, )) self.failUnlessEqual(len(wsp_disco.metadatas), 1) metadata = wsp_disco.metadatas[0] self.failUnlessEqual(metadata.abstract, abstract) self.failUnlessEqual(metadata.providerId, wsp.providerId) self.failUnlessEqual(len(metadata.serviceContext), 1) self.failUnlessEqual(len(metadata.serviceContext[0].serviceType), 1) self.failUnlessEqual(metadata.serviceContext[0].serviceType[0], lasso.PP11_HREF) self.failUnlessEqual(len(metadata.serviceContext[0].endpointContext), 1) self.failUnlessEqual( len(metadata.serviceContext[0].endpointContext[0].address), 1) self.failUnlessEqual( metadata.serviceContext[0].endpointContext[0].address[0], spSoapEndpoint) self.failUnlessEqual( len(metadata.serviceContext[0].endpointContext[0].securityMechId), 1) self.failUnlessEqual( metadata.serviceContext[0].endpointContext[0].securityMechId[0], lasso.SECURITY_MECH_BEARER) self.failUnless(metadata.svcMDID is None) wsp_disco.buildRequestMsg() self.failUnlessEqual(wsp_disco.msgUrl, idpSoapEndpoint) self.failUnless(wsp_disco.msgBody is not None) idp_disco = lasso.IdWsf2Discovery(idp) self.failUnless(idp_disco is not None) idp_disco.processRequestMsg(wsp_disco.msgBody) self.failUnless(idp_disco.request is not None) self.failUnlessEqual(len(idp_disco.request.svcMD), 1) self.failUnless(idp_disco.request.svcMD[0].svcMDID is None) try: idp_disco.checkSecurityMechanism() except lasso.Error, e: self.fail(e)
def metadataRegister(self, wsp, idp, session_dump, abstract=None, address=None, provider_id=None, service_types=None, services_map=None): session = lasso.Session.newFromDump(session_dump) assertion = session.getAssertion(idp.providerId) self.failUnless(assertion is not None) epr = assertion.idwsf2GetDiscoveryBootstrapEpr() self.failUnless(epr is not None) wsp_disco = lasso.IdWsf2Discovery(wsp) wsp_disco.setEpr(epr) abstract = 'Personal Profile service' self.failUnless(abstract is not None) self.failUnless(address is not None) self.failUnless(service_types is not None) self.failUnless(isinstance(services_map, dict)) wsp_disco.initMetadataRegister() if not provider_id: provider_id = wsp.providerId wsp_disco.addSimpleServiceMetadata( service_types=service_types, abstract=abstract, provider_id=provider_id, address=address, security_mechanisms=(lasso.SECURITY_MECH_BEARER, )) wsp_disco.buildRequestMsg() idp_disco = lasso.IdWsf2Discovery(idp) idp_disco.processRequestMsg(wsp_disco.msgBody) idp_disco.checkSecurityMechanism() idp_disco.validateRequest() self.failUnlessEqual(len(idp_disco.metadatas), 1) # add metadatas to directory sender = idp_disco.getSoapEnvelopeRequest().sb2GetProviderId() self.failUnless(sender is not None) metadatas = services_map.get(sender, []) for metadata in idp_disco.metadatas: services_map[metadata.svcMDID] = metadata metadatas.append(metadata.svcMDID) services_map[sender] = metadatas idp_disco.buildResponseMsg() wsp_disco.processResponseMsg(idp_disco.msgBody) self.failUnlessEqual(len(wsp_disco.metadatas), 1) self.failUnlessEqual(wsp_disco.metadatas[0].svcMDID, wsp_disco.response.svcMDID[0]) return wsp_disco.metadatas[0].svcMDID
def test02(self): """Metadata association query""" idp = self.getIdpServer() wsp = self.getWspServer() wsc = self.getWscServer() # Register the service, add an association federations = {} wsp_identity_dump, wsp_session_dump, \ idp_identity_dump, idp_session_dump, \ wsp_dst_epr = self.login(wsp, idp, 1, federations) service_maps = {} svcMDID = self.metadataRegister(wsp, idp, wsp_session_dump, service_types=(lasso.PP11_HREF, ), address=spSoapEndpoint, abstract='My first PP service', services_map=service_maps) service_associations = {} self.addAssociation(wsp, idp, wsp_session_dump, svcMDID, service_maps, federations, service_associations) # Start a query wsp_disco = lasso.IdWsf2Discovery(wsp) wsp_disco.setEpr(wsp_dst_epr) wsp_disco.initMetadataAssociationQuery() wsp_disco.buildRequestMsg() # idp_disco = lasso.IdWsf2Discovery(idp) idp_disco.processRequestMsg(wsp_disco.msgBody) idp_disco.checkSecurityMechanism() self.failUnlessEqual(idp_disco.svcmdids, ()) f = self.nid2tuple(idp_disco.getNameIdentifier()) uid = federations[f] result = [] for svcmdid in service_associations[uid]: result.append(svcmdid) idp_disco.svcmdids = tuple(result) idp_disco.validateRequest() idp_disco.buildResponseMsg() wsp_disco.processResponseMsg(idp_disco.msgBody) self.failUnlessEqual(wsp_disco.svcmdids, (svcMDID, ))
def query(self, wsc, idp, idp_identity_dump, wsc_session_dump, uid, federations, services_map, service_associations, provider_ids = None, service_types = None, options = None, actions = None): session = lasso.Session.newFromDump(wsc_session_dump) assertion = session.getAssertion(idp.providerId) self.failUnless(assertion is not None) epr = assertion.idwsf2GetDiscoveryBootstrapEpr() self.failUnless(epr is not None) wsc_disco = lasso.IdWsf2Discovery(wsc) wsc_disco.setEpr(epr) wsc_disco.initQuery() wsc_disco.addRequestedService(service_types = service_types, provider_ids = provider_ids, options = options, actions = actions) wsc_disco.buildRequestMsg() idp_disco = lasso.IdWsf2Discovery(idp) idp_disco.setIdentityFromDump(idp_identity_dump) idp_disco.processRequestMsg(wsc_disco.msgBody) f = self.nid2tuple(idp_disco.getNameIdentifier()) uid = federations[f] for id in service_associations[uid]: idp_disco.addServiceMetadata(services_map[id]) idp_disco.validateRequest() idp_disco.buildResponseMsg() wsc_disco.processResponseMsg(idp_disco.msgBody) return wsc_disco.endpointReferences
# Here keep information about the request associated to ID: response_envelope.getMessageId().content wsp_disco_dump = wsp_disco.dump() wsp_disco = lasso.Node.newFromDump(wsp_disco_dump) wsp_disco.server = wsp request_envelope = wsp_disco.getSoapEnvelopeRequest() self.failUnless(request_envelope is not None) relates_to = request_envelope.getRelatesTo(True) self.failUnless(relates_to is not None) response_message_id = response_envelope.getMessageId().content relates_to.content = response_message_id wsp_disco.buildRequestMsg() # now redo as for test01 after request building self.failUnlessEqual(wsp_disco.msgUrl, idpSoapEndpoint) self.failUnless(wsp_disco.msgBody is not None) idp_disco = lasso.IdWsf2Discovery(idp) self.failUnless(idp_disco is not None) idp_disco.processRequestMsg(wsp_disco.msgBody) self.failUnless(idp_disco.request is not None) self.failUnlessEqual(len(idp_disco.request.svcMD), 1) self.failUnless(idp_disco.request.svcMD[0].svcMDID is None) try: idp_disco.checkSecurityMechanism() except lasso.Error, e: self.fail(e) try: idp_disco.validateRequest() except lasso.Error, e: self.fail(e) self.failUnless(idp_disco.response is not None) self.failUnlessEqual(len(idp_disco.metadatas), 1)