Source code for twitter_ads_v2.oauth
import string
import random
import time
import oauthlib.oauth1.rfc5849.signature as oauth1
from oauthlib.oauth1.rfc5849.utils import escape
from urllib.parse import urlencode
[docs]class OAuth1(object):
[docs] @classmethod
def get_auth_header(self, client, method, base_uri, params, body=[]):
uri_query = self._dict_to_string(params)
headers = self._get_base_headers(client)
c_params = self._collect_parameters(uri_query, body, headers)
n_params = oauth1.normalize_parameters(c_params)
base_string = oauth1.signature_base_string(
method,
base_uri,
n_params
)
signature = oauth1.sign_hmac_sha1(
base_string,
client.consumer_secret,
client.access_token_secret
)
headers['Authorization'] = (
headers['Authorization'] + ', oauth_signature="' + escape(signature) + '"'
)
return headers['Authorization']
def _collect_parameters(uri_query, body=[], headers=None):
return oauth1.collect_parameters(
uri_query=uri_query,
body=body,
headers=headers,
exclude_oauth_signature=True,
with_realm=False
)
def _dict_to_string(params):
return urlencode(params)
def _get_base_headers(client):
nonce = ''.join(random.choices(string.ascii_letters + string.digits, k=32))
timestamp = int(time.time())
headers = {
"Authorization": (
'OAuth '
'oauth_nonce="' + nonce + '", '
'oauth_timestamp=' + str(timestamp) + ', '
'oauth_token="' + client.access_token + '", '
'oauth_consumer_key="' + client.consumer_key + '", '
'oauth_signature_method="HMAC-SHA1", '
'oauth_version="1.0"'
)
}
return headers