@@ -157,12 +157,28 @@ def __init__(
157157 self ._session .proxies .update (filtered_proxies )
158158
159159 if host :
160+ if self ._cloud_uri :
161+ LOGGER .info (
162+ "apisession:__init__: overriding previously loaded MIST_HOST with constructor parameter"
163+ )
160164 self .set_cloud (host )
161165 if email :
166+ if self .email :
167+ LOGGER .info (
168+ "apisession:__init__: overriding previously loaded MIST_USER with constructor parameter"
169+ )
162170 self .set_email (email )
163171 if password :
172+ if self ._password :
173+ LOGGER .info (
174+ "apisession:__init__: overriding previously loaded MIST_PASSWORD with constructor parameter"
175+ )
164176 self .set_password (password )
165177 if apitoken :
178+ if self ._apitoken :
179+ LOGGER .info (
180+ "apisession:__init__: overriding previously loaded MIST_APITOKEN with constructor parameter"
181+ )
166182 self .set_api_token (apitoken )
167183 self .first_name : str = ""
168184 self .last_name : str = ""
@@ -244,10 +260,18 @@ def _load_vault(
244260 mist_host = read_response ["data" ]["data" ].get ("MIST_HOST" , None )
245261 LOGGER .info ("apisession:_load_vault: MIST_HOST=%s" , mist_host )
246262 if mist_host :
263+ if self ._cloud_uri :
264+ LOGGER .info (
265+ "apisession:_load_vault: overriding previously loaded MIST_HOST"
266+ )
247267 self .set_cloud (mist_host )
248268
249269 mist_apitoken = read_response ["data" ]["data" ].get ("MIST_APITOKEN" , None )
250270 if mist_apitoken :
271+ if self ._apitoken :
272+ LOGGER .info (
273+ "apisession:_load_vault: overriding previously loaded MIST_APITOKEN"
274+ )
251275 self .set_api_token (mist_apitoken )
252276 except (KeyError , TypeError , AttributeError ):
253277 LOGGER .error ("apisession:_load_vault: Failed to retrieve secret" )
@@ -270,10 +294,18 @@ def _load_keyring(self, keyring_service) -> None:
270294 try :
271295 mist_host = keyring .get_password (keyring_service , "MIST_HOST" )
272296 if mist_host :
297+ if self ._cloud_uri :
298+ LOGGER .info (
299+ "apisession:_load_keyring: overriding previously loaded MIST_HOST"
300+ )
273301 LOGGER .info ("apisession:_load_keyring: MIST_HOST=%s" , mist_host )
274302 self .set_cloud (mist_host )
275303 mist_apitoken = keyring .get_password (keyring_service , "MIST_APITOKEN" )
276304 if mist_apitoken :
305+ if self ._apitoken :
306+ LOGGER .info (
307+ "apisession:_load_keyring: overriding previously loaded MIST_APITOKEN"
308+ )
277309 if isinstance (mist_apitoken , str ):
278310 for token in mist_apitoken .split ("," ):
279311 token = token .strip ()
@@ -285,10 +317,18 @@ def _load_keyring(self, keyring_service) -> None:
285317 self .set_api_token (mist_apitoken )
286318 mist_user = keyring .get_password (keyring_service , "MIST_USER" )
287319 if mist_user :
320+ if self .email :
321+ LOGGER .info (
322+ "apisession:_load_keyring: overriding previously loaded MIST_USER"
323+ )
288324 LOGGER .info ("apisession:_load_keyring: MIST_USER retrieved" )
289325 self .set_email (mist_user )
290326 mist_password = keyring .get_password (keyring_service , "MIST_PASSWORD" )
291327 if mist_password :
328+ if self ._password :
329+ LOGGER .info (
330+ "apisession:_load_keyring: overriding previously loaded MIST_PASSWORD"
331+ )
292332 LOGGER .info ("apisession:_load_keyring: MIST_PASSWORD retrieved" )
293333 self .set_password (mist_password )
294334 except Exception as e :
@@ -701,6 +741,7 @@ def _process_login(self, retry: bool = True) -> str | None:
701741 if resp .status_code == 200 :
702742 LOGGER .info ("apisession:_process_login:authentication successful!" )
703743 CONSOLE .info ("Authentication successful!" )
744+ self ._password = None
704745 self ._set_authenticated (True )
705746 else :
706747 error = resp .json ().get ("detail" )
@@ -818,14 +859,22 @@ def login_with_return(
818859 elif self .email and self ._password :
819860 if two_factor :
820861 LOGGER .debug ("apisession:login_with_return:login/pwd provided with 2FA" )
821- if self ._two_factor_authentication (two_factor ):
862+ error_login = self ._process_login (retry = False )
863+ if error_login :
864+ LOGGER .error (
865+ "apisession:login_with_return:login/pwd auth failed: %s" ,
866+ error_login ,
867+ )
868+ return {"authenticated" : False , "error" : error_login }
869+ if not self ._two_factor_authentication (two_factor ):
822870 LOGGER .error (
823- "apisession:login_with_return:login/pwd auth failed: 2FA authentication failed"
871+ "apisession:login_with_return:2FA authentication failed"
824872 )
825873 return {
826874 "authenticated" : False ,
827875 "error" : "2FA authentication failed" ,
828876 }
877+ LOGGER .info ("apisession:login_with_return:authenticated with 2FA" )
829878 else :
830879 LOGGER .debug ("apisession:login_with_return:login/pwd provided w/o 2FA" )
831880 error_login = self ._process_login (retry = False )
@@ -1044,10 +1093,8 @@ def _two_factor_authentication(self, two_factor: str) -> bool:
10441093 True if authentication succeed, False otherwise
10451094 """
10461095 LOGGER .debug ("apisession:_two_factor_authentication" )
1047- uri = "/api/v1/login"
1096+ uri = "/api/v1/login/two_factor "
10481097 body = {
1049- "email" : self .email ,
1050- "password" : self ._password ,
10511098 "two_factor" : two_factor ,
10521099 }
10531100 resp = self ._session .post (self ._url (uri ), json = body )
@@ -1102,7 +1149,16 @@ def _getself(self) -> bool:
11021149 elif key == "tags" :
11031150 for tag in resp .data ["tags" ]:
11041151 self .tags .append (tag )
1105- else :
1152+ elif key in [
1153+ "first_name" ,
1154+ "last_name" ,
1155+ "email" ,
1156+ "enable_two_factor" ,
1157+ "two_factor_verified" ,
1158+ "no_tracking" ,
1159+ "password_expiry" ,
1160+ "password_modified_time" ,
1161+ ]:
11061162 setattr (self , key , val )
11071163 if self ._show_cli_notif :
11081164 print ()
0 commit comments