def get(self, version, consumer_key, consumer_secret, token_key, token_secret): if version not in self.VERSIONS: raise HTTPError(400) authorization = self.get_authorization() if not authorization: raise HTTPError(400) self._check_timestamp(authorization.get('oauth_timestamp')) if self._check_signature(authorization, consumer_secret): self.finish(urlencode({ "oauth_token": token_key, "oauth_token_secret": token_secret}))
def get(self, version, consumer_key, consumer_secret, tmp_token_key, tmp_token_secret, verifier, token_key, token_secret): if version not in self.VERSIONS: raise HTTPError(400) authorization = self.get_authorization() self._check_timestamp(authorization.get('oauth_timestamp')) if self._check_signature(authorization, str(consumer_secret), str(tmp_token_secret)): # token and token_secret for protected sources self.finish(urlencode({ "oauth_token": token_key, "oauth_token_secret": token_secret}))
def normalize_parameters(url): """Normalize url parameters The parameters collected in Section 3.4.1.3 are normalized into a single string as follow: http://tools.ietf.org/html/rfc5849#section-3.4.1.3.2 """ items = [] # Include any query string parameters from the provided URL query = urlparse.urlparse(url)[4] parameters = parse_qs(utf8(query), keep_blank_values=True) for k, v in parameters.iteritems(): parameters[k] = unquote(v[0]) url_items = parameters.items() url_items = [(utf8(k), utf8(v)) for k, v in url_items if k != 'oauth_signature'] items.extend(url_items) items.sort() encoded_str = urlencode(items) # Encode signature parameters per Oauth Core 1.0 protocol # spec draft 7, section 3.6 # (http://tools.ietf.org/html/draft-hammer-oauth-07#section-3.6) # Spaces must be encoded with "%20" instead of "+" return encoded_str.replace('+', '%20').replace('%7E', '~')