Skip to content

Commit

Permalink
Make use of refresh token.
Browse files Browse the repository at this point in the history
  • Loading branch information
RenierM26 committed Apr 3, 2021
1 parent f9e56ed commit 5e51e96
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 30 deletions.
56 changes: 31 additions & 25 deletions pyezviz/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@

DEFAULT_TIMEOUT = 25
MAX_RETRIES = 3
FEATURE_CODE = "c22cb01f8cb83351422d82fad59c8e4e"
# token = {"sessionId": None, "refreshSessionId": None}


class PyEzvizError(Exception):
Expand All @@ -40,13 +42,13 @@ def __init__(
password,
url="apiieu.ezvizlife.com",
timeout=DEFAULT_TIMEOUT,
token=None,
):
"""Initialize the client object."""
self.account = account
self.password = password
self._session = None
self._sessionid = None
self._rfsessionid = None
self._token = token or {"session_id": None, "rf_session_id": None}
self._timeout = timeout
self.api_uri = url

Expand All @@ -64,7 +66,7 @@ def _login(self):
payload = {
"account": self.account,
"password": md5pass,
"featureCode": "f57ac347d68dcf8baf907a906f59c01f",
"featureCode": FEATURE_CODE,
}

try:
Expand Down Expand Up @@ -108,14 +110,14 @@ def _login(self):
if json_result["meta"]["code"] == 1015:
raise PyEzvizError("The user is locked.")

self._sessionid = str(json_result["loginSession"]["sessionId"])
self._rfsessionid = str(json_result["loginSession"]["rfSessionId"])
if not self._sessionid:
self._token["session_id"] = str(json_result["loginSession"]["sessionId"])
self._token["rf_session_id"] = str(json_result["loginSession"]["rfSessionId"])
if not self._token["session_id"]:
raise PyEzvizError(
f"Login error: Please check your username/password: {req.text}"
)

return True
return self._token

def _api_get_pagelist(self, page_filter=None, json_key=None, max_retries=0):
"""Get data from pagelist API."""
Expand All @@ -129,7 +131,7 @@ def _api_get_pagelist(self, page_filter=None, json_key=None, max_retries=0):
try:
req = self._session.get(
"https://" + self.api_uri + API_ENDPOINT_PAGELIST,
headers={"sessionId": self._sessionid},
headers={"sessionId": self._token["session_id"]},
params={"filter": page_filter},
timeout=self._timeout,
)
Expand Down Expand Up @@ -190,7 +192,7 @@ def get_alarminfo(self, serial, max_retries=0):
try:
req = self._session.get(
"https://" + self.api_uri + API_ENDPOINT_ALARMINFO_GET,
headers={"sessionId": self._sessionid},
headers={"sessionId": self._token["session_id"]},
params={
"deviceSerials": serial,
"queryType": -1,
Expand Down Expand Up @@ -240,7 +242,7 @@ def _switch_status(self, serial, status_type, enable, max_retries=0):
+ "/1/1/"
+ str(status_type)
+ API_ENDPOINT_SWITCH_STATUS,
headers={"sessionId": self._sessionid},
headers={"sessionId": self._token["session_id"]},
data={
"enable": enable,
"serial": serial,
Expand Down Expand Up @@ -291,7 +293,7 @@ def sound_alarm(self, serial, enable=1, max_retries=0):
+ serial
+ "/0"
+ API_ENDPOINT_SWITCH_SOUND_ALARM,
headers={"sessionId": self._sessionid},
headers={"sessionId": self._token["session_id"]},
data={
"enable": enable,
},
Expand Down Expand Up @@ -475,7 +477,7 @@ def ptz_control(self, command, serial, action, speed=5):
"uuid": str(uuid4()),
"serial": serial,
},
headers={"sessionId": self._sessionid, "clientType": "1"},
headers={"sessionId": self._token["session_id"], "clientType": "1"},
timeout=self._timeout,
)

Expand All @@ -492,15 +494,15 @@ def login(self):
self._session = requests.session()
return self._login()

if self._sessionid and self._rfsessionid:
if self._token["session_id"] and self._token["rf_session_id"]:
try:
req = self._session.put(
"https://" + self.api_uri + API_ENDPOINT_REFRESH_SESSION_ID,
data={
"refreshSessionId": self._rfsessionid,
"featureCode": "f57ac347d68dcf8baf907a906f59c01f",
"refreshSessionId": self._token["rf_session_id"],
"featureCode": FEATURE_CODE,
},
headers={"sessionId": self._sessionid},
headers={"sessionId": self._token["session_id"]},
timeout=self._timeout,
)
req.raise_for_status()
Expand All @@ -519,11 +521,15 @@ def login(self):
+ str(req.text)
) from err

self._sessionid = str(json_result["sessionInfo"]["sessionId"])
self._rfsessionid = str(json_result["sessionInfo"]["refreshSessionId"])
if not self._sessionid:
self._token["session_id"] = str(json_result["sessionInfo"]["sessionId"])
self._token["rf_session_id"] = str(
json_result["sessionInfo"]["refreshSessionId"]
)
if not self._token["session_id"]:
raise PyEzvizError(f"Relogin required: {req.text}")

return self._token

return True

def data_report(self, serial, enable=1, max_retries=0):
Expand All @@ -534,7 +540,7 @@ def data_report(self, serial, enable=1, max_retries=0):
try:
req = self._session.post(
"https://" + self.api_uri + API_ENDPOINT_SET_DEFENCE,
headers={"sessionId": self._sessionid},
headers={"sessionId": self._token["session_id"]},
data={
"deviceSerial": serial,
"defenceType": "Global",
Expand Down Expand Up @@ -589,7 +595,7 @@ def api_set_defence_schedule(self, serial, schedule, enable, max_retries=0):
try:
req = self._session.post(
"https://" + self.api_uri + API_ENDPOINT_SET_DEFENCE_SCHEDULE,
headers={"sessionId": self._sessionid},
headers={"sessionId": self._token["session_id"]},
data={
"devTimingPlan": schedulestring,
},
Expand Down Expand Up @@ -634,7 +640,7 @@ def api_set_defence_mode(self, mode: DefenseModeType, max_retries=0):
try:
req = self._session.post(
"https://" + self.api_uri + API_ENDPOINT_SWITCH_DEFENCE_MODE,
headers={"sessionId": self._sessionid},
headers={"sessionId": self._token["session_id"]},
data={
"groupId": -1,
"mode": mode,
Expand Down Expand Up @@ -683,7 +689,7 @@ def detection_sensibility(self, serial, sensibility=3, type_value=3, max_retries
try:
req = self._session.post(
"https://" + self.api_uri + API_ENDPOINT_DETECTION_SENSIBILITY,
headers={"sessionId": self._sessionid},
headers={"sessionId": self._token["session_id"]},
data={
"subSerial": serial,
"type": type_value,
Expand Down Expand Up @@ -724,7 +730,7 @@ def get_detection_sensibility(self, serial, type_value="0", max_retries=0):
try:
req = self._session.post(
"https://" + self.api_uri + API_ENDPOINT_DETECTION_SENSIBILITY_GET,
headers={"sessionId": self._sessionid},
headers={"sessionId": self._token["session_id"]},
data={
"subSerial": serial,
},
Expand Down Expand Up @@ -777,7 +783,7 @@ def alarm_sound(self, serial, sound_type, enable=1, max_retries=0):
+ API_ENDPOINT_DEVICES
+ serial
+ API_ENDPOINT_ALARM_SOUND,
headers={"sessionId": self._sessionid},
headers={"sessionId": self._token["session_id"]},
data={
"enable": enable,
"soundType": sound_type,
Expand Down
6 changes: 2 additions & 4 deletions pyezviz/test_cam_rtsp.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,6 @@ def __init__(
"defaultPassword": password,
}

# IRWGYJ

def generate_auth_string(self, realm, method, uri, nonce):
"""Generate digest auth string """
map_return_info = {}
Expand Down Expand Up @@ -113,12 +111,12 @@ def main(self):
start = msg1.decode().find("realm")
begin = msg1.decode().find('"', start)
end = msg1.decode().find('"', begin + 1)
realm = msg1[begin + 1: end]
realm = msg1[begin + 1 : end]

start = msg1.decode().find("nonce")
begin = msg1.decode().find('"', start)
end = msg1.decode().find('"', begin + 1)
nonce = msg1[begin + 1: end]
nonce = msg1[begin + 1 : end]

auth_seq = self.generate_auth_string(
realm,
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

setuptools.setup(
name='pyezviz',
version="0.1.8.2",
version="0.1.8.3",
license='Apache Software License 2.0',
author='Pierre Ourdouille',
author_email='[email protected]',
Expand Down

0 comments on commit 5e51e96

Please sign in to comment.