From f31329731fa997d322768e7c9b5cf476692f0479 Mon Sep 17 00:00:00 2001 From: Niels Perfors Date: Fri, 11 Aug 2023 10:57:15 +0000 Subject: [PATCH 01/10] remove unused self._stepup --- verisure/session.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/verisure/session.py b/verisure/session.py index 91d19a8..286ed52 100644 --- a/verisure/session.py +++ b/verisure/session.py @@ -81,7 +81,6 @@ def __init__(self, username, password, self._cookie_file_name = os.path.expanduser(cookie_file_name) self._giid = None self._base_url = None - self._stepup = None self._base_urls = ['https://automation01.verisure.com', 'https://automation02.verisure.com'] self._post = self._wrap_request(requests.post) @@ -242,7 +241,6 @@ def logout(self): self._base_url = None self._giid = None self._cookies = None - self._stepup = None if os.path.exists(self._cookie_file_name): os.remove(self._cookie_file_name) From af243372278b0a82a93e1872ece73a69314a5947 Mon Sep 17 00:00:00 2001 From: Niels Perfors Date: Fri, 11 Aug 2023 10:59:24 +0000 Subject: [PATCH 02/10] add trust --- verisure/session.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/verisure/session.py b/verisure/session.py index 286ed52..af18a0f 100644 --- a/verisure/session.py +++ b/verisure/session.py @@ -79,6 +79,7 @@ def __init__(self, username, password, self._password = password self._cookies = None self._cookie_file_name = os.path.expanduser(cookie_file_name) + self._trust_token = None self._giid = None self._base_url = None self._base_urls = ['https://automation01.verisure.com', @@ -189,6 +190,16 @@ def validate_mfa(self, code): with open(self._cookie_file_name, 'wb') as cookie_file: pickle.dump(self._cookies, cookie_file) + trust_response = self._post( + url="/auth/trust", + headers={ + 'APPLICATION_ID': 'PS_PYTHON', + 'Accept': 'application/json', + }, + cookies=self._cookies) + self._cookies.update(trust_response.cookies) + self._trust_token = trust_response.json() + installations = self.get_installations() if 'errors' not in installations: return installations @@ -233,6 +244,15 @@ def update_cookie(self): def logout(self): """ Log out from the verisure app api """ try: + if self._trust_token is not None: + token = self._trust_token['trustTokenValue'] + self._delete( + url=f"/auth/trust/{token}", + headers={ + 'APPLICATION_ID': 'PS_PYTHON', + 'Accept': 'application/json', + }, + cookies=self._cookies) self._delete( url="/auth/logout", headers={'APPLICATION_ID': 'PS_PYTHON'}, @@ -241,6 +261,7 @@ def logout(self): self._base_url = None self._giid = None self._cookies = None + self._trust_token = None if os.path.exists(self._cookie_file_name): os.remove(self._cookie_file_name) From 7428917a892e77ea867c4bf23b4456af7be8d956 Mon Sep 17 00:00:00 2001 From: Niels Perfors Date: Fri, 11 Aug 2023 10:59:42 +0000 Subject: [PATCH 03/10] update login_cookie --- verisure/session.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/verisure/session.py b/verisure/session.py index af18a0f..062f22b 100644 --- a/verisure/session.py +++ b/verisure/session.py @@ -218,8 +218,16 @@ def login_cookie(self): except Exception as ex: raise LoginError("Failed to read cookie") from ex - # Update cookie - self.update_cookie() + # Login + response = self._post( + "/auth/login", + headers={ + 'APPLICATION_ID': 'PS_PYTHON', + 'Accept': 'application/json', + }, + auth=(self._username, self._password), + cookies=self._cookies) + self._cookies.update(response.cookies) installations = self.get_installations() if 'errors' not in installations: From 4cba725199f06d45325437b0ae5e578a154ccc1f Mon Sep 17 00:00:00 2001 From: Niels Perfors Date: Fri, 11 Aug 2023 11:21:29 +0000 Subject: [PATCH 04/10] bump version --- README.md | 1 + setup.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1a11c3c..c95e268 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ devices. ## Version History ```txt +2.6.5 Enable trust 2.6.4 Handle "SYS_00004" response again (was removed in 2.6.3) 2.6.3 Differentiate response errors 2.6.2 Fix request wrapper diff --git a/setup.py b/setup.py index 9799430..67dfe29 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ setup( name='vsure', - version='2.6.4', + version='2.6.5', description='Read and change status of verisure devices through mypages.', long_description='A python3 module for reading and changing status of ' + 'verisure devices through mypages.', From f242d78610959e3c4960c236fa3fae58aee57a80 Mon Sep 17 00:00:00 2001 From: Niels Date: Tue, 15 Aug 2023 21:31:49 +0000 Subject: [PATCH 05/10] Update cookie_file after trust request --- verisure/session.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/verisure/session.py b/verisure/session.py index 062f22b..aba7d99 100644 --- a/verisure/session.py +++ b/verisure/session.py @@ -185,10 +185,7 @@ def validate_mfa(self, code): 'Content-Type': 'application/json'}, cookies=self._cookies, data=json.dumps({"token": code})) - self._cookies = response.cookies - with open(self._cookie_file_name, 'wb') as cookie_file: - pickle.dump(self._cookies, cookie_file) trust_response = self._post( url="/auth/trust", @@ -198,6 +195,8 @@ def validate_mfa(self, code): }, cookies=self._cookies) self._cookies.update(trust_response.cookies) + with open(self._cookie_file_name, 'wb') as cookie_file: + pickle.dump(self._cookies, cookie_file) self._trust_token = trust_response.json() installations = self.get_installations() From 3cf6dee1f47c134352467b561d2c550b951ca6cf Mon Sep 17 00:00:00 2001 From: Niels Date: Wed, 16 Aug 2023 07:20:38 +0000 Subject: [PATCH 06/10] revert login_cookie revert commit 7428917a892e77ea867c4bf23b4456af7be8d956 --- verisure/session.py | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/verisure/session.py b/verisure/session.py index aba7d99..fab6a99 100644 --- a/verisure/session.py +++ b/verisure/session.py @@ -217,16 +217,8 @@ def login_cookie(self): except Exception as ex: raise LoginError("Failed to read cookie") from ex - # Login - response = self._post( - "/auth/login", - headers={ - 'APPLICATION_ID': 'PS_PYTHON', - 'Accept': 'application/json', - }, - auth=(self._username, self._password), - cookies=self._cookies) - self._cookies.update(response.cookies) + # Update cookie + self.update_cookie() installations = self.get_installations() if 'errors' not in installations: From baa115aefdc27beb5c014059081ab1ce6508d0b9 Mon Sep 17 00:00:00 2001 From: Niels Date: Wed, 16 Aug 2023 07:21:48 +0000 Subject: [PATCH 07/10] send only `vid` and `vs-refresh` on update_cookie --- verisure/session.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/verisure/session.py b/verisure/session.py index fab6a99..753cb47 100644 --- a/verisure/session.py +++ b/verisure/session.py @@ -231,10 +231,13 @@ def update_cookie(self): Cookie can last 15 minutes before it needs to be updated. """ + cookie_jar = requests.sessions.RequestsCookieJar() + cookie_jar['vid'] = self._cookies['vid'] + cookie_jar['vs-refresh'] = self._cookies['vs-refresh'] response = self._get( url="/auth/token", headers={'APPLICATION_ID': 'PS_PYTHON'}, - cookies=self._cookies) + cookies=cookie_jar) self._cookies.update(response.cookies) with open(self._cookie_file_name, 'wb') as cookie_file: From f4d8781f2fdc961f9e8d8dd4f79091833dcec260 Mon Sep 17 00:00:00 2001 From: Niels Date: Wed, 16 Aug 2023 08:37:19 +0000 Subject: [PATCH 08/10] update login_cookie Attempt loging with trust cookie (if any) and username/password --- verisure/session.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/verisure/session.py b/verisure/session.py index 753cb47..cbbf57a 100644 --- a/verisure/session.py +++ b/verisure/session.py @@ -217,8 +217,19 @@ def login_cookie(self): except Exception as ex: raise LoginError("Failed to read cookie") from ex - # Update cookie - self.update_cookie() + # Login + cookie_jar = requests.sessions.RequestsCookieJar() + for name, value in self._cookies.items(): + if 'vs-trust' in name: + cookie_jar.set(name, value) + response = self._post( + url="/auth/login", + headers={'APPLICATION_ID': 'PS_PYTHON'}, + auth=(self._username, self._password), + cookies=cookie_jar) + self._cookies.update(response.cookies) + with open(self._cookie_file_name, 'wb') as f: + pickle.dump(self._cookies, f) installations = self.get_installations() if 'errors' not in installations: From 3e0e5acaef18bda1f87e33ba04dac3987e1f760e Mon Sep 17 00:00:00 2001 From: Niels Perfors Date: Sat, 19 Aug 2023 08:23:09 +0000 Subject: [PATCH 09/10] bump version --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 67dfe29..ef93d42 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ setup( name='vsure', - version='2.6.5', + version='2.6.6', description='Read and change status of verisure devices through mypages.', long_description='A python3 module for reading and changing status of ' + 'verisure devices through mypages.', From adec97bdf9f650d87fbf219607e9f020ce3c8f1c Mon Sep 17 00:00:00 2001 From: Niels Perfors Date: Mon, 21 Aug 2023 15:33:25 +0000 Subject: [PATCH 10/10] update `update_cookie` Improve code quality --- verisure/session.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/verisure/session.py b/verisure/session.py index 8f8e459..f55489e 100644 --- a/verisure/session.py +++ b/verisure/session.py @@ -253,8 +253,10 @@ def update_cookie(self): """ cookie_jar = requests.sessions.RequestsCookieJar() - cookie_jar['vid'] = self._cookies['vid'] - cookie_jar['vs-refresh'] = self._cookies['vs-refresh'] + if self._cookies is not None: + for name, value in self._cookies.items(): + if name in ['vid', 'vs-refresh']: + cookie_jar[name] = value response = self._get( url="/auth/token", headers={'APPLICATION_ID': 'PS_PYTHON'},