Ejemplo n.º 1
0
 def test_normalize_request_parameters_params_string(self):
     # params is a string but data is a dict
     self.request.params = urlencode({'a': 'b'})
     self.request.data = {'foo': 'bar'}
     normalized = \
         HmacSha1Signature()._normalize_request_parameters(self.request)
     self.assertEqual('a=b&foo=bar',  normalized)
Ejemplo n.º 2
0
 def test_hmacsha1_signature(self):
     self.request.params = {'foo': 'bar'}
     oauth_signature = HmacSha1Signature().sign(self.request,
                                                self.hook.consumer_key,
                                                self.hook.access_token)
     self.assertIsNotNone(oauth_signature)
     self.assertTrue(isinstance(oauth_signature, str))
Ejemplo n.º 3
0
 def test_sign_utf8_encoded_string(self):
     # in the event a string is already UTF-8
     req_kwargs = {u'params': {u'foo': u'bar'}}
     sig = HmacSha1Signature().sign(self.consumer_secret,
                                    self.access_token_secret, u'GET',
                                    self.url, self.oauth_params, req_kwargs)
     self.assertEqual('cYzjVXCOk62KoYmJ+iCvcAcgfp8=', sig)
Ejemplo n.º 4
0
    def __init__(self,
                 consumer_key,
                 consumer_secret,
                 access_token=None,
                 access_token_secret=None,
                 header_auth=False,
                 signature=None,
                 default_oauth_callback=None):
        # consumer credentials
        self.consumer_key = consumer_key
        self.consumer_secret = consumer_secret

        # access token credentials
        self.access_token = access_token
        self.access_token_secret = access_token_secret

        self.header_auth = header_auth

        self.signature = HmacSha1Signature()

        # override the default signature object if available
        if signature is not None:
            self.signature = signature

        # 'oauth_callback' is required only on request-token requests
        self.oauth_callback = default_oauth_callback
Ejemplo n.º 5
0
 def test_normalize_request_parameters_both_string(self):
     # params and data both as a string
     self.request.params = urlencode({'a': 'b'})
     self.request.data = urlencode({'foo': 'bar'})
     normalized = \
         HmacSha1Signature()._normalize_request_parameters(self.request)
     # this also demonstrates sorting
     self.assertEqual('a=b&foo=bar',  normalized)
Ejemplo n.º 6
0
 def test_sign_with_data(self):
     # in the event a string is already UTF-8
     req_kwargs = {'data': {'foo': 'bar'}}
     method = 'POST'
     sig = HmacSha1Signature().sign(self.consumer_secret,
                                    self.access_token_secret, method,
                                    self.url, self.oauth_params, req_kwargs)
     self.assertEqual('JzmJUmqjdNYBJsJWbtQKXnc0W8w=', sig)
Ejemplo n.º 7
0
 def test_hmacsha1_signature(self):
     oauth_signature = HmacSha1Signature().sign(self.consumer_secret,
                                                self.access_token_secret,
                                                self.method, self.url,
                                                self.oauth_params,
                                                self.req_kwargs)
     self.assertIsNotNone(oauth_signature)
     self.assertIsInstance(oauth_signature, str)
     self.assertEqual(oauth_signature, 'cYzjVXCOk62KoYmJ+iCvcAcgfp8=')
Ejemplo n.º 8
0
 def test_normalize_request_parameters_data_string(self):
     # params is a dict but data is a string
     self.request.params = {'a': 'b'}
     self.request.data = urlencode({'foo': 'bar'})
     self.request.headers = \
         {'Content-Type': 'application/x-www-form-urlencoded'}
     normalized = \
         HmacSha1Signature()._normalize_request_parameters(self.request)
     self.assertEqual('a=b&foo=bar', normalized)
Ejemplo n.º 9
0
 def test_normalize_request_parameters_both_string(self):
     # params and data both as a string
     self.request.params = urlencode({'a': 'b'})
     self.request.data = urlencode({'foo': 'bar'})
     self.request.headers = \
         {'Content-Type': 'application/x-www-form-urlencoded'}
     normalized = \
         HmacSha1Signature()._normalize_request_parameters(self.request)
     # this also demonstrates sorting
     self.assertEqual('a=b&foo=bar', normalized)
Ejemplo n.º 10
0
    def test_normalize_request_parameters_data(self):
        # data as a dict
        req_kwargs = {'data': {'foo': 'bar'},
                      'headers': {'Content-Type': FORM_URLENCODED}}
        normalized = HmacSha1Signature()\
            ._normalize_request_parameters(self.oauth_params, req_kwargs)
        self.assertEqual('foo=bar',  normalized)

        # data as a dict with URL encodable chars
        req_kwargs = {'data': {'foo+bar': 'baz'},
                      'headers': {'Content-Type': FORM_URLENCODED}}
        normalized = HmacSha1Signature()\
            ._normalize_request_parameters({}, req_kwargs)
        self.assertEqual('foo%2Bbar=baz',  normalized)
        self.assertNotIn('+', normalized)

        normalized = HmacSha1Signature()\
            ._normalize_request_parameters(self.oauth_params, req_kwargs)
        self.assertEqual('foo%2Bbar=baz',  normalized)
        self.assertNotIn('+', normalized)
Ejemplo n.º 11
0
 def test_normalize_request_parameters_whitespace(self):
     req_kwargs = {
         'data': {
             'foo': 'bar baz'
         },
         'headers': {
             'Content-Type': FORM_URLENCODED
         }
     }
     normalized = HmacSha1Signature()\
         ._normalize_request_parameters(self.oauth_params, req_kwargs)
     self.assertEqual('foo=bar%20baz', normalized)
Ejemplo n.º 12
0
    def test_normalize_request_parameters_params(self):
        # params as a dict
        normalized = HmacSha1Signature()\
            ._normalize_request_parameters(self.oauth_params, self.req_kwargs)
        self.assertEqual('foo=bar',  normalized)

        # params as a dict with URL encodable chars
        normalized = HmacSha1Signature()\
            ._normalize_request_parameters(self.oauth_params,
                                           {'params': {'foo+bar': 'baz'}})
        self.assertEqual('foo%2Bbar=baz',  normalized)
        self.assertNotIn('+', normalized)

        # params and dict as dicts
        req_kwargs = {'params': {'a': 'b'},
                      'data': {'foo': 'bar'},
                      'headers': {'Content-Type': FORM_URLENCODED}}

        normalized = HmacSha1Signature()\
            ._normalize_request_parameters({}, req_kwargs)
        self.assertEqual('a=b&foo=bar',  normalized)
Ejemplo n.º 13
0
    def test_normalize_request_parameters_data(self):
        # data as a dict
        self.request.data = {'foo': 'bar'}
        normalized = \
            HmacSha1Signature()._normalize_request_parameters(self.request)
        self.assertEqual('foo=bar',  normalized)

        # data as a dict with URL encodable chars
        self.request.params_and_data = {}
        self.request.data = {'foo+bar': 'baz'}
        normalized = \
            HmacSha1Signature()._normalize_request_parameters(self.request)
        self.assertEqual('foo%2Bbar=baz',  normalized)
        self.assertTrue('+' not in normalized)

        # data as a string with URL encodable chars
        self.request.data = urlencode({'foo+bar': 'baz'})
        normalized = \
            HmacSha1Signature()._normalize_request_parameters(self.request)
        self.assertEqual('foo%2Bbar=baz',  normalized)
        self.assertTrue('+' not in normalized)
Ejemplo n.º 14
0
    def test_normalize_request_parameters_params(self):
        # params as a dict
        self.request.params = {'foo': 'bar'}
        normalized = \
            HmacSha1Signature()._normalize_request_parameters(self.request)
        self.assertEqual('foo=bar', normalized)

        # params as a dict with URL encodable chars
        self.request.params_and_data = {}
        self.request.params = {'foo+bar': 'baz'}
        normalized = \
            HmacSha1Signature()._normalize_request_parameters(self.request)
        self.assertEqual('foo%2Bbar=baz', normalized)
        self.assertTrue('+' not in normalized)

        # params as a string
        self.request.params_and_data = {}
        self.request.params = urlencode({'foo': 'bar'})
        normalized = \
            HmacSha1Signature()._normalize_request_parameters(self.request)
        self.assertEqual('foo=bar', normalized)

        # params as a string with URL encodable chars
        self.request.params_and_data = {}
        self.request.params = urlencode({'foo+bar': 'baz'})
        normalized = \
            HmacSha1Signature()._normalize_request_parameters(self.request)
        self.assertEqual('foo%2Bbar=baz', normalized)
        self.assertTrue('+' not in normalized)

        # params and dict as dicts
        self.request.params_and_data = {}
        self.request.params = {'a': 'b'}
        self.request.data = {'foo': 'bar'}
        self.request.headers = \
            {'Content-Type': 'application/x-www-form-urlencoded'}
        normalized = \
            HmacSha1Signature()._normalize_request_parameters(self.request)
        self.assertEqual('a=b&foo=bar', normalized)
Ejemplo n.º 15
0
    def test_normalize_request_parameters_data_not_alphanumeric(self):
        # data is not alphanumeric (for example: Japanese)
        try:
            from urllib import unquote
        except ImportError:
            from urllib.parse import unquote

        # unicode
        req_kwargs = {u'params': {u'foo': u'こんにちは世界'}}
        normalized = HmacSha1Signature()\
            ._normalize_request_parameters({}, req_kwargs)

        key, value = normalized.split('=')
        decoded_value = unquote(value)
        self.assertEqual('こんにちは世界', unquote(decoded_value))

        # str
        req_kwargs = {'params': {'foo': 'こんにちは世界'}}
        normalized = HmacSha1Signature()\
            ._normalize_request_parameters({}, req_kwargs)

        key, value = normalized.split('=')
        decoded_value = unquote(value)
        self.assertEqual('こんにちは世界', unquote(decoded_value))
Ejemplo n.º 16
0
    def __init__(self,
                 consumer_key,
                 consumer_secret,
                 access_token=None,
                 access_token_secret=None,
                 header_auth=False,
                 signature=None):
        self.consumer = Consumer(consumer_key, consumer_secret)

        # intitialize the token and then set it if possible
        self.token = None
        if not None in (access_token, access_token_secret):
            self.token = Token(access_token, access_token_secret)

        self.header_auth = header_auth

        self.signature = HmacSha1Signature()

        # override the default signature object if available
        if signature is not None:
            self.signature = signature
Ejemplo n.º 17
0
    def __init__(self,
                 consumer_key,
                 consumer_secret,
                 access_token=None,
                 access_token_secret=None,
                 header_auth=False,
                 signature=None):
        # consumer credentials
        self.consumer_key = consumer_key
        self.consumer_secret = consumer_secret

        # access token credentials
        self.access_token = access_token
        self.access_token_secret = access_token_secret

        self.header_auth = header_auth

        self.signature = HmacSha1Signature()

        # override the default signature object if available
        if signature is not None:
            self.signature = signature
Ejemplo n.º 18
0
 def test_remove_query_string(self):
     # can't sign the URL with the query string so
     url = 'http://example.com/?foo=bar'
     signable_url = HmacSha1Signature()._remove_qs(url)
     self.assertEqual('http://example.com/', signable_url)
Ejemplo n.º 19
0
 def test_utf8_encoded_string(self):
     # in the event a string is already UTF-8
     self.request.params = {u'foo': u'bar'}
     self.request.url = u'http://example.com/'
     HmacSha1Signature().sign(self.request, self.hook.consumer_key)
     self.assertEqual({'foo': 'bar'},  self.request.params)