· 6 years ago · May 30, 2019, 01:36 PM
1import requests
2import hashlib
3import hmac
4import json
5import time
6import sys
7from pprint import pprint
8
9"""
10Example Code
11
12This will Work with Python 2 and 3
13
14"""
15apikey = "<public_key>"
16apisecret = "<secret_key>"
17base_url = "https://password.db"
18
19
20def tpm_request(req_url, body={}):
21 """
22 HMAC Authenticated request
23 :param req_url:
24 :param body:
25 :return dict, int:
26 """
27 req_timestamp = str(int(time.time()))
28
29 if len(body) > 0:
30 req_body = json.dumps(body)
31 req_unhashed = '{}{}{}'.format(req_url, req_timestamp, req_body).encode
32 else:
33 req_unhashed = '{}{}'.format(req_url, req_timestamp)
34
35 # Check Python Version
36 if sys.version_info[0] >= 3:
37 apihash = hmac.new(apisecret.encode('utf-8'), msg=req_unhashed.encode('utf-8'), digestmod=hashlib.sha256)
38 elif sys.version_info[0] == 2 and sys.version_info[1] >= 5:
39 apihash = hmac.new(apisecret, msg=req_unhashed, digestmod=hashlib.sha256)
40 else:
41 print("Error: Python is too old")
42
43 headers = {
44 'X-Public-Key': apikey,
45 'X-Request-Hash': str(apihash.hexdigest()),
46 'X-Request-Timestamp': req_timestamp,
47 'content-type': "application/json; charset=utf-8"
48 }
49
50 if len(body) > 0:
51 data = requests.post('{}/index.php/{}'.format(base_url, req_url), data=req_body, headers=headers)
52 else:
53 data = requests.get('{}/index.php/{}'.format(base_url, req_url), headers=headers)
54
55 request_data = json.loads(data.text)
56 request_status = data.status_code
57
58 return request_data, request_status
59
60
61if __name__ == '__main__':
62
63 # request password via ID
64 data, status_code = tpm_request('api/v4/passwords/1.json')
65 pprint(data)
66 print(status_code)
67
68 # create password
69 #data, status_code = tpm_request('api/v4/passwords.json', body={'name':'My new password', 'project_id':82})
70 #print(data, status)