Example #1
0
    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}))
Example #2
0
    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}))
Example #3
0
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', '~')