Skip to main content

Generate a OAuth 1.0 Signature or Store a Code Response in a User Defined Variable

When we want to run a python script and the response will come from the same script and has no relation with the data which is flowing in this case we will use a variable Responsedata as an empty array [], before the start of script and will append the response of the script in this array.

Responsedata = []
import datetime
import random
import string
import hashlib
import base64
import hmac
import urllib.parse
request_method = 'POST'
url = 'https://xxxxxxxxxxx.suitetalk.api.netsuite.com/services/rest/query/v1/suiteql'
oauth_consumer_id = 'xxxxxxxxxxx'
oauth_consumer_key = 'xxxxxxxxxxx'
oauth_consumer_secret ='xxxxxxxxxxx'
oauth_token ='xxxxxxxxxxx'
oauth_token_secret ='xxxxxxxxxxx'
oauth_signature_method = 'HMAC-SHA256'
oauth_timestamp = str(int(datetime.datetime.now().timestamp()))
oauth_nonce = ''.join(random.choices(string.ascii_letters + string.digits, k = 11))
oauth_version = '1.0'
normalized_request_method = request_method.replace(' ', '')
normalized_string_url = urllib.parse.quote(url, safe = '')
normalized_params = {'oauth_consumer_key': oauth_consumer_key,'oauth_token': oauth_token,'oauth_signature_method': oauth_signature_method,'oauth_timestamp': oauth_timestamp,'oauth_nonce': oauth_nonce,'oauth_version': oauth_version}
sorted_params = dict(sorted(normalized_params.items()))
normalized_string_parmas = [k+'='+v for k,v in sorted_params.items()]
normalized_string_parmas = '&'.join([str(elem) for elem in normalized_string_parmas])
normalized_string_parmas.replace(' ','')
normalized_string_parmas = urllib.parse.quote(normalized_string_parmas, safe = '')
base_string = request_method + '&' + normalized_string_url + '&' + normalized_string_parmas
base_string = str.encode(base_string)
signature_key = oauth_consumer_secret + '&' + oauth_token_secret
signature_key = str.encode(signature_key)
oauth_signature = hmac.new(signature_key, base_string, hashlib.sha256)
oauth_signature.hexdigest()
oauth_signature = base64.b64encode(oauth_signature.digest())
oauth_signature = oauth_signature.decode('UTF-8')
oauth_signature = urllib.parse.quote(oauth_signature, safe = '')
signature ='OAuth realm="'f'{oauth_consumer_id}",oauth_consumer_key="'f'{oauth_consumer_key}",oauth_token="'f'{oauth_token}",oauth_signature_method="'f'{oauth_signature_method}",oauth_timestamp="'f'{oauth_timestamp}",oauth_nonce="'f'{oauth_nonce}",oauth_version="'f'{oauth_version}",oauth_signature="'f'{oauth_signature}"'

Responsedata.append({"authorization":signature})

Sample Response of above pycode

"items": [{"authorization": "OAuth realm="xxxxxxxxxxx",oauth_consumer_key="xxxxxxxxxxxxx",oauth_token="xxxxxxxxxxxxxxx",oauth_signature_method=\"HMAC-SHA256\",oauth_timestamp=\"1691760038\",oauth_nonce=\"unDhRpo4S\",oauth_version=\"1.0\",oauth_signature=\"s%2B18C8ehMc2PkUB1%2FuTTgKpqPqU148BlWiuYlgg%3D\""}]

In the above example we are using a pre_request_script to generate a signature and add the value in the data which is flowing so for this in the start we have defined a Responsedata variable and at the end appending the response.