示例#1
0
    def test01(self):
        '''Test a discovery remove'''
        self.wsp = self.get_wsp_server()
        self.idp = self.get_idp_server()
        self.idp = self.add_services(self.idp)

        # Login from WSP
        sp_identity_dump, sp_session_dump, idp_identity_dump, idp_session_dump = self.login(self.wsp, self.idp)

        # Init discovery modify
        wsp_disco = lasso.Discovery(self.wsp)
        wsp_disco.setIdentityFromDump(sp_identity_dump)
        wsp_disco.setSessionFromDump(sp_session_dump)
        wsp_disco.initModify()
        wsp_disco.addRemoveEntry('0')
        wsp_disco.buildRequestMsg()

        # Process Modify
        request_type = lasso.getRequestTypeFromSoapMsg(wsp_disco.msgBody)
        self.failUnless(request_type == lasso.REQUEST_TYPE_DISCO_MODIFY)
        idp_disco = lasso.Discovery(self.idp)
        idp_disco.processRequestMsg(wsp_disco.msgBody)
        idp_disco.setIdentityFromDump(idp_identity_dump)
        offering = self.get_resource_offering()
        idp_disco.getIdentity().addResourceOffering(offering)
        self.failUnless('<disco:ServiceType>urn:liberty:id-sis-pp:2003-08</disco:ServiceType>' in
            idp_disco.identity.dump())
        idp_disco.buildResponseMsg()
        self.failUnless('<disco:Status code="OK"/>' in idp_disco.msgBody)
        self.failIf('<disco:ServiceType>urn:liberty:id-sis-pp:2003-08</disco:ServiceType>' in
            idp_disco.identity.dump())

        # Process Response
        wsp_disco.processModifyResponseMsg(idp_disco.msgBody)
示例#2
0
    def test01(self):
        '''Test a data service query'''
        wsc_service = self.get_pp_service()
        wsc_service.initQuery('/pp10:PP/pp10:InformalName', 'name')
        wsc_service.buildSoapRequestMsg()
        self.failUnless(
            lasso.getRequestTypeFromSoapMsg(wsc_service.msgBody) ==
            lasso.REQUEST_TYPE_DST_QUERY)

        self.wsp = self.get_wsp_server()
        wsp_service = lasso.DataService(self.wsp)
        wsp_service.processRequestMsg(wsc_service.msgBody)
        self.failUnless(isinstance(wsp_service.request, lasso.DstQuery))
        wsp_service.resourceData = '''
            <PP xmlns="urn:liberty:id-sis-pp:2003-08">
                    <InformalName>Damien</InformalName>
            </PP>'''
        wsp_service.validateRequest()
        wsp_service.buildResponseMsg()

        wsc_service.processQueryResponseMsg(wsp_service.msgBody)
        self.failUnless(
            wsc_service.getAnswer() ==
            '<InformalName xmlns="urn:liberty:id-sis-pp:2003-08">Damien</InformalName>'
        )
示例#3
0
    def test01(self):
        '''Test a discovery modify'''
        self.wsp = self.get_wsp_server()
        self.idp = self.get_idp_server()
        self.idp = self.add_services(self.idp)

        # Login from WSP
        sp_identity_dump, sp_session_dump, idp_identity_dump, idp_session_dump = self.login(self.wsp, self.idp)

        # Init discovery modify
        wsp_disco = lasso.Discovery(self.wsp)
        wsp_disco.setIdentityFromDump(sp_identity_dump)
        wsp_disco.setSessionFromDump(sp_session_dump)
        resource_offering = self.get_resource_offering()
        wsp_disco.initModify()
        wsp_disco.addInsertEntry(resource_offering.serviceInstance, resource_offering.resourceId)
        wsp_disco.buildRequestMsg()

        # Process Modify
        request_type = lasso.getRequestTypeFromSoapMsg(wsp_disco.msgBody)
        self.failUnless(request_type == lasso.REQUEST_TYPE_DISCO_MODIFY)
        idp_disco = lasso.Discovery(self.idp)
        idp_disco.processRequestMsg(wsp_disco.msgBody)
        idp_disco.setIdentityFromDump(idp_identity_dump)
        idp_disco.buildResponseMsg()
        offerings = idp_disco.identity.getOfferings()
        self.failUnless('<disco:Status code="OK"/>' in idp_disco.msgBody)
        self.failUnless('<disco:ModifyResponse newEntryIDs="%s"' % offerings[0].entryId in idp_disco.msgBody)
        self.failUnless('<disco:ServiceType>urn:liberty:id-sis-pp:2003-08</disco:ServiceType>' in
            idp_disco.identity.dump())

        # Process Response
        wsp_disco.processModifyResponseMsg(idp_disco.msgBody)
        self.failUnless(wsp_disco.response.newEntryIds == '0')
示例#4
0
def soap(request):
    '''SAMLv1.1 soap endpoint implementation.

       It should handle request for:
        - artifact resolution
        - logout
        - and federation termination'''
    soap_message = get_soap_message(request)
    request_type = lasso.getRequestTypeFromSoapMsg(soap_message)
    if request_type == lasso.REQUEST_TYPE_LOGIN:
        return artifact_resolve(request, soap_message)
    else:
        message = _('ID-FFv1.2: soap request type %r is currently not supported') % request_type
        logging.warning(message)
        return NotImplementedError(message)
示例#5
0
def soap(request):
    '''SAMLv1.1 soap endpoint implementation.

       It should handle request for:
        - artifact resolution
        - logout
        - and federation termination'''
    soap_message = get_soap_message(request)
    request_type = lasso.getRequestTypeFromSoapMsg(soap_message)
    if request_type == lasso.REQUEST_TYPE_LOGIN:
        return artifact_resolve(request, soap_message)
    else:
        message = _(
            'ID-FFv1.2: soap request type %r is currently not supported'
        ) % request_type
        logging.warning(message)
        return NotImplementedError(message)
    def singleLogoutSOAP(self, session_data, soap_request_msg):
        # FIXME: this binding doesn't work yet and thus is not included in generated metadata
        request_type = lasso.getRequestTypeFromSoapMsg(soap_request_msg) 

        if request_type != lasso.REQUEST_TYPE_LOGOUT:
            LOG('Saml singleLogoutSOAP :', WARNING, 'SOAP message on single logout url not a slo message')
            return 500, None

        logout = lasso.Logout(self.getLassoServer())
        logout.processRequestMsg(soap_request_msg)
        name_identifier = logout.nameIdentifier.content

        session = self.getSessionFromNameIdentifier(session_data, name_identifier)
        if not session:
            # No session, build straight failure answer
            logout.buildResponseMsg()
            return '200', logout.msgBody

        return self.slo_idp(logout, session[1])
示例#7
0
    def test03(self):
        '''Test a data service modify with redirect for consent'''

        xpath = '/pp:PP/pp:InformalName'
        old_data = '''<PP xmlns="urn:liberty:id-sis-pp:2003-08">
                <InformalName>Damien</InformalName>
            </PP>'''
        new_data = '<InformalName>Alain</InformalName>'

        new_full_data = '''<PP xmlns="urn:liberty:id-sis-pp:2003-08">
                <pp:InformalName xmlns:pp="urn:liberty:id-sis-pp:2003-08">Alain</pp:InformalName>
            </PP>'''
        redir_url = 'http://site/redirect_for_consent'

        wsc_service = self.get_pp_service()
        wsc_service.initModify()
        wsc_service.addModification(xpath, new_data, overrideAllowed = True)
        wsc_service.buildRequestMsg()

        request_type = lasso.getRequestTypeFromSoapMsg(wsc_service.msgBody)
        self.failUnless(request_type == lasso.REQUEST_TYPE_DST_MODIFY)

        self.wsp = self.get_wsp_server()
        wsp_service = lasso.DataService(self.wsp)
        wsp_service.processRequestMsg(wsc_service.msgBody)
        wsp_service.resourceData = old_data

        wsp_service.initInteractionServiceRedirect(redir_url)
        wsp_service.buildModifyResponseMsg()
        # Save the new wsp_service.resourceData here

        # Data mustn't have been modified here
        self.failUnless(wsp_service.resourceData == old_data)
        self.failUnless(wsp_service.msgBody is not None)

        try:
            wsc_service.processModifyResponseMsg(wsp_service.msgBody)
        except lasso.SoapRedirectRequestFaultError:
            pass
        except Exception, e:
            self.fail(e)
示例#8
0
    def test03(self):
        '''Test a data service modify with redirect for consent'''

        xpath = '/pp:PP/pp:InformalName'
        old_data = '''<PP xmlns="urn:liberty:id-sis-pp:2003-08">
                <InformalName>Damien</InformalName>
            </PP>'''
        new_data = '<InformalName>Alain</InformalName>'

        new_full_data = '''<PP xmlns="urn:liberty:id-sis-pp:2003-08">
                <pp:InformalName xmlns:pp="urn:liberty:id-sis-pp:2003-08">Alain</pp:InformalName>
            </PP>'''
        redir_url = 'http://site/redirect_for_consent'

        wsc_service = self.get_pp_service()
        wsc_service.initModify()
        wsc_service.addModification(xpath, new_data, overrideAllowed=True)
        wsc_service.buildRequestMsg()

        request_type = lasso.getRequestTypeFromSoapMsg(wsc_service.msgBody)
        self.failUnless(request_type == lasso.REQUEST_TYPE_DST_MODIFY)

        self.wsp = self.get_wsp_server()
        wsp_service = lasso.DataService(self.wsp)
        wsp_service.processRequestMsg(wsc_service.msgBody)
        wsp_service.resourceData = old_data

        wsp_service.initInteractionServiceRedirect(redir_url)
        wsp_service.buildModifyResponseMsg()
        # Save the new wsp_service.resourceData here

        # Data mustn't have been modified here
        self.failUnless(wsp_service.resourceData == old_data)
        self.failUnless(wsp_service.msgBody is not None)

        try:
            wsc_service.processModifyResponseMsg(wsp_service.msgBody)
        except lasso.SoapRedirectRequestFaultError:
            pass
        except Exception, e:
            self.fail(e)
示例#9
0
    def test01(self):
        '''Test a data service modify'''

        xpath = '/pp10:PP/pp10:InformalName'
        old_data = '''
            <PP xmlns="urn:liberty:id-sis-pp:2003-08">
                <InformalName>Damien</InformalName>
            </PP>'''
        new_data = '<InformalName>Alain</InformalName>'

        new_full_data = '''<PP xmlns="urn:liberty:id-sis-pp:2003-08">
                <pp10:InformalName xmlns:pp10="urn:liberty:id-sis-pp:2003-08">Alain</pp10:InformalName>
            </PP>'''

        wsc_service = self.get_pp_service()
        wsc_service.initModify()
        wsc_service.addModification(xpath, new_data, overrideAllowed=True)
        wsc_service.buildRequestMsg()

        request_type = lasso.getRequestTypeFromSoapMsg(wsc_service.msgBody)
        self.failUnless(request_type == lasso.REQUEST_TYPE_DST_MODIFY)

        self.wsp = self.get_wsp_server()
        wsp_service = lasso.DataService(self.wsp)
        wsp_service.processRequestMsg(wsc_service.msgBody)

        item = wsp_service.request.modification[0]
        self.failUnless(
            item.newData.any[0] ==
            '<pp10:InformalName xmlns:pp10="urn:liberty:id-sis-pp:2003-08">Alain</pp10:InformalName>'
        )
        self.failUnless(item.select == '/pp10:PP/pp10:InformalName')

        wsp_service.resourceData = old_data
        wsp_service.validateRequest()
        wsp_service.buildModifyResponseMsg()
        # Save the new wsp_service.resourceData here

        self.failUnless(wsp_service.resourceData == new_full_data)

        wsc_service.processModifyResponseMsg(wsp_service.msgBody)
示例#10
0
    def test01(self):
        '''Test a data service modify'''

        xpath = '/pp10:PP/pp10:InformalName'
        old_data = '''
            <PP xmlns="urn:liberty:id-sis-pp:2003-08">
                <InformalName>Damien</InformalName>
            </PP>'''
        new_data = '<InformalName>Alain</InformalName>'

        new_full_data = '''<PP xmlns="urn:liberty:id-sis-pp:2003-08">
                <pp10:InformalName xmlns:pp10="urn:liberty:id-sis-pp:2003-08">Alain</pp10:InformalName>
            </PP>'''

        wsc_service = self.get_pp_service()
        wsc_service.initModify()
        wsc_service.addModification(xpath, new_data, overrideAllowed = True)
        wsc_service.buildRequestMsg()

        request_type = lasso.getRequestTypeFromSoapMsg(wsc_service.msgBody)
        self.failUnless(request_type == lasso.REQUEST_TYPE_DST_MODIFY)

        self.wsp = self.get_wsp_server()
        wsp_service = lasso.DataService(self.wsp)
        wsp_service.processRequestMsg(wsc_service.msgBody)

        item = wsp_service.request.modification[0]
        self.failUnless(item.newData.any[0] ==
            '<pp10:InformalName xmlns:pp10="urn:liberty:id-sis-pp:2003-08">Alain</pp10:InformalName>')
        self.failUnless(item.select == '/pp10:PP/pp10:InformalName')

        wsp_service.resourceData = old_data
        wsp_service.validateRequest()
        wsp_service.buildModifyResponseMsg()
        # Save the new wsp_service.resourceData here

        self.failUnless(wsp_service.resourceData == new_full_data)

        wsc_service.processModifyResponseMsg(wsp_service.msgBody)
示例#11
0
    def test01(self):
        '''Test a data service query'''
        wsc_service = self.get_pp_service()
        wsc_service.initQuery('/pp10:PP/pp10:InformalName', 'name')
        wsc_service.buildSoapRequestMsg()
        self.failUnless(lasso.getRequestTypeFromSoapMsg(wsc_service.msgBody)
                        == lasso.REQUEST_TYPE_DST_QUERY)

        self.wsp = self.get_wsp_server()
        wsp_service = lasso.DataService(self.wsp)
        wsp_service.processRequestMsg(wsc_service.msgBody)
        self.failUnless(isinstance(wsp_service.request, lasso.DstQuery))
        wsp_service.resourceData = '''
            <PP xmlns="urn:liberty:id-sis-pp:2003-08">
                    <InformalName>Damien</InformalName>
            </PP>'''
        wsp_service.validateRequest()
        wsp_service.buildResponseMsg()

        wsc_service.processQueryResponseMsg(wsp_service.msgBody)
        self.failUnless(wsc_service.getAnswer() ==
                '<InformalName xmlns="urn:liberty:id-sis-pp:2003-08">Damien</InformalName>')
示例#12
0
    def test01(self):
        '''Test a discovery modify'''
        self.wsp = self.get_wsp_server()
        self.idp = self.get_idp_server()
        self.idp = self.add_services(self.idp)

        # Login from WSP
        sp_identity_dump, sp_session_dump, idp_identity_dump, idp_session_dump = self.login(
            self.wsp, self.idp)

        # Init discovery modify
        wsp_disco = lasso.Discovery(self.wsp)
        wsp_disco.setIdentityFromDump(sp_identity_dump)
        wsp_disco.setSessionFromDump(sp_session_dump)
        resource_offering = self.get_resource_offering()
        wsp_disco.initModify()
        wsp_disco.addInsertEntry(resource_offering.serviceInstance,
                                 resource_offering.resourceId)
        wsp_disco.buildRequestMsg()

        # Process Modify
        request_type = lasso.getRequestTypeFromSoapMsg(wsp_disco.msgBody)
        self.failUnless(request_type == lasso.REQUEST_TYPE_DISCO_MODIFY)
        idp_disco = lasso.Discovery(self.idp)
        idp_disco.processRequestMsg(wsp_disco.msgBody)
        idp_disco.setIdentityFromDump(idp_identity_dump)
        idp_disco.buildResponseMsg()
        offerings = idp_disco.identity.getOfferings()
        self.failUnless('<disco:Status code="OK"/>' in idp_disco.msgBody)
        self.failUnless('<disco:ModifyResponse newEntryIDs="%s"' %
                        offerings[0].entryId in idp_disco.msgBody)
        self.failUnless(
            '<disco:ServiceType>urn:liberty:id-sis-pp:2003-08</disco:ServiceType>'
            in idp_disco.identity.dump())

        # Process Response
        wsp_disco.processModifyResponseMsg(idp_disco.msgBody)
        self.failUnless(wsp_disco.response.newEntryIds == '0')
    def soapEndpoint(self, session_data, soapRequestMessage):
        request_type = lasso.getRequestTypeFromSoapMsg(soapRequestMessage)

        if request_type == lasso.REQUEST_TYPE_LOGOUT:
            logout = lasso.Logout(self.getLassoServer())
            logout.processRequestMsg(soapRequestMessage)
            nameIdentifier = logout.nameIdentifier.content
            identityDump = self.federations.getIdentityDump(nameIdentifier)
            logout.setIdentityFromDump(identityDump)
            sessionDump = self.getSessionDumpFromSessionData(session_data)
            logout.setSessionFromDump(sessionDump)
            try:
                logout.validateRequest()
            except lasso.Error, error:
                if error[0] != lasso.PROFILE_ERROR_SESSION_NOT_FOUND:
                    raise
            else:
                session = self.getSessionFromNameIdentifier(session_data, nameIdentifier)
                if session:
                    self.removeLibertyDataFromSession(session_data, nameIdentifier)
                    session.invalidate()
            logout.buildResponseMsg()
            return '200', logout.msgBody
示例#14
0
    def test01(self):
        '''Test a discovery remove'''
        self.wsp = self.get_wsp_server()
        self.idp = self.get_idp_server()
        self.idp = self.add_services(self.idp)

        # Login from WSP
        sp_identity_dump, sp_session_dump, idp_identity_dump, idp_session_dump = self.login(
            self.wsp, self.idp)

        # Init discovery modify
        wsp_disco = lasso.Discovery(self.wsp)
        wsp_disco.setIdentityFromDump(sp_identity_dump)
        wsp_disco.setSessionFromDump(sp_session_dump)
        wsp_disco.initModify()
        wsp_disco.addRemoveEntry('0')
        wsp_disco.buildRequestMsg()

        # Process Modify
        request_type = lasso.getRequestTypeFromSoapMsg(wsp_disco.msgBody)
        self.failUnless(request_type == lasso.REQUEST_TYPE_DISCO_MODIFY)
        idp_disco = lasso.Discovery(self.idp)
        idp_disco.processRequestMsg(wsp_disco.msgBody)
        idp_disco.setIdentityFromDump(idp_identity_dump)
        offering = self.get_resource_offering()
        idp_disco.getIdentity().addResourceOffering(offering)
        self.failUnless(
            '<disco:ServiceType>urn:liberty:id-sis-pp:2003-08</disco:ServiceType>'
            in idp_disco.identity.dump())
        idp_disco.buildResponseMsg()
        self.failUnless('<disco:Status code="OK"/>' in idp_disco.msgBody)
        self.failIf(
            '<disco:ServiceType>urn:liberty:id-sis-pp:2003-08</disco:ServiceType>'
            in idp_disco.identity.dump())

        # Process Response
        wsp_disco.processModifyResponseMsg(idp_disco.msgBody)