def get_redirect_uri(self, request=None): '''Get the redirect URI''' # Check if got a redirect URI if self.redirect_uri is None: # If no redirect URI, raise raise MissRedirectUri(_('No redirect_uri to send response.')) # If this is an absolute redirect URI, return it if absolute_http_url_re.match(self.redirect_uri): # Return the absolute URI return oauth2_tools.normalize_redirect_uri(self.redirect_uri) # The URL is not absolute, but check if starts with a slash to be able to build it with HTTP_REFERER #if not self.redirect_uri.startswith('/'): # # Not an absolute # If not absolute, if not request: raise MissRedirectUri(_('Absolute redirect_uri required.')) http_referer = request.META.get('HTTP_REFERER') if http_referer is None or not absolute_http_url_re.match(http_referer) or not self.redirect_uri.startswith('/'): raise MissRedirectUri(_('Absolute redirect_uri required.')) split = list(urlparse.urlparse(http_referer)) split[2] = self.redirect_uri # Path split[3] = split[4] = split[5] = '' # No parameters, query or fragment return urlparse.urlunparse(split)
def match_redirect_uri(self, redirect_uri): return normalize_redirect_uri(redirect_uri) == normalize_redirect_uri(self.redirect_uri)