@@ -119,9 +119,16 @@ def login(self, username=None, password=None, wait_for_2fa=True, code=None) -> d
119
119
"""
120
120
if username is None or password is None :
121
121
raise Exception ("Username or password not provided" )
122
+ # See if we can refresh login
123
+ refresh_success = False
124
+ try :
125
+ response = self ._refresh_token ()
126
+ refresh_success = True
127
+ except Exception :
128
+ pass
122
129
headers = self .session .headers
123
130
need_2fa = True
124
- if code is None :
131
+ if code is None and not refresh_success :
125
132
payload = self .endpoints .build_payload (username , password )
126
133
self ._load_cookies ()
127
134
response = self .session .post (
@@ -152,7 +159,7 @@ def login(self, username=None, password=None, wait_for_2fa=True, code=None) -> d
152
159
code = input ("Enter code: " )
153
160
else :
154
161
need_2fa = False
155
- if need_2fa :
162
+ if need_2fa and not refresh_success :
156
163
payload = self .endpoints .build_payload (username , password , code )
157
164
response = self .session .post (
158
165
self .endpoints .mfa_url (),
@@ -171,17 +178,19 @@ def login(self, username=None, password=None, wait_for_2fa=True, code=None) -> d
171
178
if response .status_code != 200 :
172
179
raise Exception ("Login failed, check credentials" )
173
180
response = response .json ()
174
- self .access_token = response ["loginResponse" ]["accessToken" ]
175
- self .account_uuid = response ["loginResponse" ]["accounts" ][0 ]["accountUuid" ]
176
- self .account_number = response ["loginResponse" ]["accounts" ][0 ]["account" ]
177
- self .expires_at = (int (response ["loginResponse" ]["serverTime" ]) / 1000 ) + int (
178
- response ["loginResponse" ]["expiresIn" ]
181
+ # Get info from response
182
+ if "loginResponse" in response :
183
+ response = response ["loginResponse" ]
184
+ self .access_token = response ["accessToken" ]
185
+ self .account_uuid = response ["accounts" ][0 ]["accountUuid" ]
186
+ self .account_number = response ["accounts" ][0 ]["account" ]
187
+ self .expires_at = (int (response ["serverTime" ]) / 1000 ) + int (
188
+ response ["expiresIn" ]
179
189
)
180
190
self .all_login_info = response
181
191
self ._save_cookies ()
182
192
return response
183
193
184
- @login_required
185
194
def _refresh_token (self ) -> dict :
186
195
"""
187
196
Refreshes the access token by making a POST request to the refresh URL.
@@ -448,7 +457,7 @@ def get_account_type(self) -> str:
448
457
Returns:
449
458
str: The user's account type.
450
459
"""
451
- return self .all_login_info ["loginResponse" ][ " accounts" ][0 ]["type" ]
460
+ return self .all_login_info ["accounts" ][0 ]["type" ]
452
461
453
462
@login_required
454
463
def get_account_cash (self ) -> float :
0 commit comments