# -*- coding: utf-8 -*- """ Created on Thu Aug 27 12:43:12 2020 @author: ypputta """ import base64 import collections import hashlib import hmac import random from time import time as tstmp import urllib from typing import Dict import requests import string def get_workflows(base_url: str, api_key: str, api_secret: str): if base_url[-1] != '/': base_url += "/" endpoint = "api/v1/workflows/subscription/" url = F"{base_url}{endpoint}" params = generate_oauth_params(api_key) signature = generate_signature("GET", url, params, api_secret) params.update({'oauth_signature': signature}) print(params) result = requests.get(url, params=params) return result.status_code, result.text def quote_string(value) -> str: return requests.utils.quote(value, safe="~") def generate_base_string(method: str, url: str, params: str) -> str: return "&".join((method, quote_string(url), quote_string(params))) def generate_signature(method: str, url: str, params: Dict, secret: str) -> str: sorted_params = collections.OrderedDict(sorted(params.items())) normalized_params = urllib.parse.urlencode(sorted_params) base_string = generate_base_string(method, url, normalized_params) base_bytes = bytes(base_string, 'utf-8') secret_bytes = bytes("&".join([secret, '']), 'utf-8') print(base_bytes) print(secret_bytes) digester = hmac.new(secret_bytes, base_bytes, hashlib.sha1) sgntr = base64.encodebytes(digester.digest()).decode('utf-8').strip('\n') return sgntr def id_generator(size=6, chars=string.ascii_letters + string.digits): return ''.join(random.choice(chars) for _ in range(size)) def generate_oauth_params(api_key: str) -> Dict: timestamp = str(int(tstmp())) nonce = id_generator(11) params: Dict = { 'oauth_timestamp': timestamp, 'oauth_signature_method': 'HMAC-SHA1', 'oauth_consumer_key': api_key, 'oauth_version': '1.0', 'oauth_nonce': nonce, } return params base_url = 'http://XXXX.com:80/gallery/' key = "XXXX" secret = "XXXX" get_workflows(base_url, key, secret)