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)
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>' )
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 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 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])
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)
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)
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)
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)
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>')
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
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)