def url_add_parameters(url, params): """Adds parameters to URL, parameter will be repeated if already present""" if params: fragments = list(urlparse(url)) fragments[4] = urlencode(parse_qsl(fragments[4]) + params.items()) url = urlunparse(fragments) return url
def url_add_parameters(url, params): """Adds parameters to URL, parameter will be repeated if already present""" if params: fragments = list(urlparse(url)) value = parse_qs(fragments[4]) value.update(params) fragments[4] = urlencode(value) url = urlunparse(fragments) return url
def _replace_domain(cls, url, new_domain): parsed_url = urlparse(url) url_parts = list(parsed_url) new_netloc = new_domain if ":" not in new_domain and ":" in parsed_url.netloc: _, port = parsed_url.netloc.split(":") new_netloc = "{}:{}".format(new_domain, port) url_parts[1] = new_netloc return urlunparse(url_parts)
def build_absolute_uri(self, path=None): url = super(DjangoTenantStrategy, self).build_absolute_uri(path) auth_domain = settings.TENANT_AUTH_COMPLETE_URL if path and path in self.auth_complete_paths: parsed_url = urlparse(url) url_parts = list(parsed_url) url_parts[1] = auth_domain return urlunparse(url_parts) return url
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)
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)