예제 #1
0
 def do_start(self):
     start_url = self.backend.start().url
     # Modify the start URL to make the SAML request consistent
     # from test to test:
     start_url = self.modify_start_url(start_url)
     # If the SAML Identity Provider recognizes the user, we will
     # be redirected back to:
     return_url = self.backend.redirect_uri
     self.install_http_intercepts(start_url, return_url)
     response = requests.get(start_url)
     self.assertTrue(response.url.startswith(return_url))
     self.assertEqual(response.text, 'foobar')
     query_values = dict((k, v[0]) for k, v in
                         parse_qs(urlparse(response.url).query).items())
     self.assertNotIn(' ', query_values['SAMLResponse'])
     self.strategy.set_request_data(query_values, self.backend)
     return self.backend.complete()
예제 #2
0
 def do_start(self):
     start_url = self.backend.start().url
     # Modify the start URL to make the SAML request consistent
     # from test to test:
     start_url = self.modify_start_url(start_url)
     # If the SAML Identity Provider recognizes the user, we will
     # be redirected back to:
     return_url = self.backend.redirect_uri
     self.install_http_intercepts(start_url, return_url)
     response = requests.get(start_url)
     self.assertTrue(response.url.startswith(return_url))
     self.assertEqual(response.text, 'foobar')
     query_values = dict(
         (k, v[0])
         for k, v in parse_qs(urlparse(response.url).query).items())
     self.assertNotIn(' ', query_values['SAMLResponse'])
     self.strategy.set_request_data(query_values, self.backend)
     return self.backend.complete()
예제 #3
0
 def modify_start_url(self, start_url):
     """
     Given a SAML redirect URL, parse it and change the ID to
     a consistent value, so the request is always identical.
     """
     # Parse the SAML Request URL to get the XML being sent to TestShib
     url_parts = urlparse(start_url)
     query = dict(
         (k, v[0]) for (k, v) in parse_qs(url_parts.query).iteritems())
     xml = OneLogin_Saml2_Utils.decode_base64_and_inflate(
         query['SAMLRequest'])
     # Modify the XML:
     xml, changed = re.subn(r'ID="[^"]+"', 'ID="TEST_ID"', xml)
     self.assertEqual(changed, 1)
     # Update the URL to use the modified query string:
     query['SAMLRequest'] = OneLogin_Saml2_Utils.deflate_and_base64_encode(
         xml)
     url_parts = list(url_parts)
     url_parts[4] = urlencode(query)
     return urlunparse(url_parts)
    def get_tenant_url(cls, url):
        parsed_url = urlparse(url)
        url_parts = list(parsed_url)
        query = parse_qs(parsed_url.query)
        state_value = (query.get('state', None)
                       or query.get('redirect_state', None))

        if not state_value:
            return None

        if isinstance(state_value, list):
            state_value = state_value[0]

        tenant = cls.tenant_from_state(state_value)
        tenant_domain = tenant.domain_url

        if ":" in settings.TENANT_AUTH_COMPLETE_URL:
            _, port = settings.TENANT_AUTH_COMPLETE_URL.split(":")
            tenant_domain = ":".join((tenant_domain, port))

        url_parts[1] = tenant_domain
        return urlunparse(url_parts)
예제 #5
0
파일: test_saml.py 프로젝트: 2070616d/TP3
 def modify_start_url(self, start_url):
     """
     Given a SAML redirect URL, parse it and change the ID to
     a consistent value, so the request is always identical.
     """
     # Parse the SAML Request URL to get the XML being sent to TestShib
     url_parts = urlparse(start_url)
     query = dict((k, v[0]) for (k, v) in
                  parse_qs(url_parts.query).iteritems())
     xml = OneLogin_Saml2_Utils.decode_base64_and_inflate(
         query['SAMLRequest']
     )
     # Modify the XML:
     xml, changed = re.subn(r'ID="[^"]+"', 'ID="TEST_ID"', xml)
     self.assertEqual(changed, 1)
     # Update the URL to use the modified query string:
     query['SAMLRequest'] = OneLogin_Saml2_Utils.deflate_and_base64_encode(
         xml
     )
     url_parts = list(url_parts)
     url_parts[4] = urlencode(query)
     return urlunparse(url_parts)
    def get_tenant_url(cls, url):
        parsed_url = urlparse(url)
        url_parts = list(parsed_url)
        query = parse_qs(parsed_url.query)
        state_value = (query.get('state', None)
                       or query.get('redirect_state', None))

        if not state_value:
            return None

        if isinstance(state_value, list):
            state_value = state_value[0]

        tenant = cls.tenant_from_state(state_value)
        tenant_domain = tenant.domain_url

        if ":" in settings.TENANT_AUTH_COMPLETE_URL:
            _, port = settings.TENANT_AUTH_COMPLETE_URL.split(":")
            tenant_domain = ":".join((tenant_domain, port))

        url_parts[1] = tenant_domain
        return urlunparse(url_parts)