diff --git a/pyezviz/client.py b/pyezviz/client.py index 5f3ee5b..2034de6 100644 --- a/pyezviz/client.py +++ b/pyezviz/client.py @@ -25,6 +25,8 @@ DEFAULT_TIMEOUT = 25 MAX_RETRIES = 3 +FEATURE_CODE = "c22cb01f8cb83351422d82fad59c8e4e" +# token = {"sessionId": None, "refreshSessionId": None} class PyEzvizError(Exception): @@ -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 @@ -64,7 +66,7 @@ def _login(self): payload = { "account": self.account, "password": md5pass, - "featureCode": "f57ac347d68dcf8baf907a906f59c01f", + "featureCode": FEATURE_CODE, } try: @@ -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.""" @@ -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, ) @@ -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, @@ -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, @@ -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, }, @@ -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, ) @@ -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() @@ -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): @@ -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", @@ -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, }, @@ -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, @@ -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, @@ -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, }, @@ -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, diff --git a/pyezviz/test_cam_rtsp.py b/pyezviz/test_cam_rtsp.py index 1ddec45..73f02ff 100644 --- a/pyezviz/test_cam_rtsp.py +++ b/pyezviz/test_cam_rtsp.py @@ -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 = {} @@ -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, diff --git a/setup.py b/setup.py index 6a2c2c1..ffd8c36 100644 --- a/setup.py +++ b/setup.py @@ -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='baqs@users.github.com',