-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcanary_api.py
99 lines (87 loc) · 3.79 KB
/
canary_api.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import os
import configparser
import requests
import json
class Canary:
baseUrl = "https://my.canary.is/api/"
def __init__(self, configFile):
self.accessToken = None
self.devices = None
self.customers = None
self.home_id = None
self.config = configparser.ConfigParser()
self.configFileName = configFile
self.loadConfigFile(self.configFileName)
self.xsrf_token = None
self.session= None
self.sessiontoken = None
def loadConfigFile(self, configFileName):
#print('read config file')
if not(os.path.isfile(configFileName)):
exit(1)
self.config.read(configFileName)
def getAccessToken(self):
payload = {}
payload["username"] = self.config["security"]["username"]
payload["password"] = self.config["security"]["password"]
try:
# get necessary header information
headers = {'Accept-Encoding': 'identity'}
response=requests.get("https://my.canary.is/login", headers=headers)
response.raise_for_status()
self.UpdateTokenInfo(response.cookies)
# print("First call with the right content")
# with header information available log in
if len(self.session)>10:
headers={}
headers["X-XSRF-TOKEN"]=self.xsrf_token
headers["Cookie"]= "ssesyranac=" + self.session
response = requests.post("https://my.canary.is/api/auth/login", data=payload, headers=headers)
response.raise_for_status()
self.UpdateTokenInfo(response.cookies)
access_token = response.json()["access_token"]
# print(response.json())
self.accessToken = access_token
# print("access token get")
return "OK"
except requests.exceptions.HTTPError as error:
# print('Request Exception:')
# print(response.request.body )
# print(response.json())
return "NOK"
# "method": "GET", "url": "https://my.canary.is/api/locations"
def getLocations(self):
# print("getloaction called")
command= "locations"
headers={}
headers["X-XSRF-TOKEN"]=self.xsrf_token
headers["Cookie"]= "ssesyranac=" + self.session
headers['Authorization'] = 'Bearer ' + self.accessToken
response = requests.get(self.baseUrl+command, headers=headers)
self.UpdateTokenInfo(response.cookies)
return response.json()
# "method": "GET", "url": "https://my.canary.is/api/readings?deviceId=1234567&type=canary"
def getMeasurements(self, deviceId=None, devicetype=None):
# print("getmeasurements called")
command= "readings"
headers={}
headers["X-XSRF-TOKEN"]=self.xsrf_token
headers["Cookie"]= "ssesyranac=" + self.session
headers['Authorization'] = 'Bearer ' + self.accessToken
payload = {}
payload["deviceId"] = deviceId
payload["type"] = devicetype
response = requests.get("https://my.canary.is/api/readings?deviceId=" + deviceId + "&type=" + devicetype, headers=headers)
# response = requests.get(self.baseUrl+command, headers=headers, data=payload)
self.UpdateTokenInfo(response.cookies)
return response.json()
def UpdateTokenInfo(self, cookiesjar=None):
if len(cookiesjar)>1:
# print(cookiesjar)
self.xsrf_token=cookiesjar['XSRF-TOKEN']
# print(self.xsrf_token)
if "ssesyranac" in cookiesjar:
self.session=cookiesjar['ssesyranac']
# print(self.session)
if "ssesyranac:token" in cookiesjar:
self.sessiontoken=cookiesjar['ssesyranac:token']