Apply fix from eracknaphobia/sucks for mysterious auth error issue.
This commit is contained in:
@@ -15,7 +15,7 @@ except FileNotFoundError:
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='sucks',
|
name='sucks',
|
||||||
version='0.8.4',
|
version='0.9.2',
|
||||||
|
|
||||||
description='a library for controlling certain robot vacuums',
|
description='a library for controlling certain robot vacuums',
|
||||||
long_description=long_description,
|
long_description=long_description,
|
||||||
|
|||||||
+6
-2
@@ -123,8 +123,12 @@ class EcoVacsAPI:
|
|||||||
self.auth_code = self.__call_main_api('user/getAuthCode',
|
self.auth_code = self.__call_main_api('user/getAuthCode',
|
||||||
('uid', self.uid),
|
('uid', self.uid),
|
||||||
('accessToken', self.login_access_token))['authCode']
|
('accessToken', self.login_access_token))['authCode']
|
||||||
self.user_access_token = self.__call_login_by_it_token()['token']
|
login_response = self.__call_login_by_it_token()
|
||||||
_LOGGER.debug("EcoVacsAPI connection complete")
|
self.user_access_token = login_response['token']
|
||||||
|
if login_response['userId'] != self.uid:
|
||||||
|
logging.debug("Switching to shorter UID " + login_response['userId'])
|
||||||
|
self.uid = login_response['userId']
|
||||||
|
logging.debug("EcoVacsAPI connection complete")
|
||||||
|
|
||||||
def __sign(self, params):
|
def __sign(self, params):
|
||||||
result = params.copy()
|
result = params.copy()
|
||||||
|
|||||||
@@ -22,11 +22,49 @@ def test_main_api_setup():
|
|||||||
text='{"time": 1511200804607, "data": {"authCode": "5c28dac1ff580210e11292df57e87bef"}, "code": "0000", "msg": "X"}')
|
text='{"time": 1511200804607, "data": {"authCode": "5c28dac1ff580210e11292df57e87bef"}, "code": "0000", "msg": "X"}')
|
||||||
r3 = m.post(compile('user.do'),
|
r3 = m.post(compile('user.do'),
|
||||||
text='{"todo": "result", "token": "jt5O7oDR3gPHdVKCeb8Czx8xw8mDXM6s", "result": "ok", "userId": "2017102559f0ee63c588d", "resource": "f8d99c4d"}')
|
text='{"todo": "result", "token": "jt5O7oDR3gPHdVKCeb8Czx8xw8mDXM6s", "result": "ok", "userId": "2017102559f0ee63c588d", "resource": "f8d99c4d"}')
|
||||||
EcoVacsAPI("long_device_id", "account_id", "password_hash", 'us', 'na')
|
|
||||||
|
api = EcoVacsAPI("long_device_id", "account_id", "password_hash", 'us', 'na')
|
||||||
|
|
||||||
|
# verify setup
|
||||||
|
assert_equals(api.resource, "long_dev")
|
||||||
|
|
||||||
|
# verify calls
|
||||||
assert_equals(r1.call_count, 1)
|
assert_equals(r1.call_count, 1)
|
||||||
assert_equals(r2.call_count, 1)
|
assert_equals(r2.call_count, 1)
|
||||||
assert_equals(r3.call_count, 1)
|
assert_equals(r3.call_count, 1)
|
||||||
|
|
||||||
|
# verify state
|
||||||
|
assert_equals(api.uid, "2017102559f0ee63c588d")
|
||||||
|
assert_equals(api.login_access_token, "7a375650b0b1efd780029284479c4e41")
|
||||||
|
assert_equals(api.auth_code, "5c28dac1ff580210e11292df57e87bef")
|
||||||
|
assert_equals(api.user_access_token, "jt5O7oDR3gPHdVKCeb8Czx8xw8mDXM6s")
|
||||||
|
|
||||||
|
|
||||||
|
def test_main_api_setup_with_alternate_uid():
|
||||||
|
# Under mysterious circumstances, for certain people the last call sometimes returns a different userId
|
||||||
|
# along with the user access token. If that's the case, we should use that as the UID for future calls
|
||||||
|
|
||||||
|
with requests_mock.mock() as m:
|
||||||
|
r1 = m.get(compile('user/login'),
|
||||||
|
text='{"time": 1511200804243, "data": {"accessToken": "7a375650b0b1efd780029284479c4e41", "uid": "2017102559f0ee63c588d", "username": null, "email": "william-ecovacs@pota.to", "country": "us"}, "code": "0000", "msg": "X"}')
|
||||||
|
r2 = m.get(compile('user/getAuthCode'),
|
||||||
|
text='{"time": 1511200804607, "data": {"authCode": "5c28dac1ff580210e11292df57e87bef"}, "code": "0000", "msg": "X"}')
|
||||||
|
r3 = m.post(compile('user.do'),
|
||||||
|
text='{"todo": "result", "token": "jt5O7oDR3gPHdVKCeb8Czx8xw8mDXM6s", "result": "ok", "userId": "abcdef", "resource": "f8d99c4d"}')
|
||||||
|
|
||||||
|
api = EcoVacsAPI("long_device_id", "account_id", "password_hash", 'us', 'na')
|
||||||
|
|
||||||
|
assert_equals(r1.call_count, 1)
|
||||||
|
assert_equals(r2.call_count, 1)
|
||||||
|
assert_equals(r3.call_count, 1)
|
||||||
|
|
||||||
|
# verify state
|
||||||
|
assert_equals(api.uid, "abcdef")
|
||||||
|
assert_equals(api.login_access_token, "7a375650b0b1efd780029284479c4e41")
|
||||||
|
assert_equals(api.auth_code, "5c28dac1ff580210e11292df57e87bef")
|
||||||
|
assert_equals(api.user_access_token, "jt5O7oDR3gPHdVKCeb8Czx8xw8mDXM6s")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def test_device_lookup():
|
def test_device_lookup():
|
||||||
api = make_api()
|
api = make_api()
|
||||||
|
|||||||
Reference in New Issue
Block a user