示例#1
0
 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)
示例#2
0
 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)
示例#3
0
 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)
示例#4
0
    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)
示例#5
0
    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)
示例#6
0
    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)
示例#7
0
    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)
示例#8
0
    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
示例#9
0
 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, ))
示例#10
0
 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
示例#11
0
        # 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)