@@ -278,9 +278,10 @@ def _load_keyring(self, keyring_service) -> None:
278278 for token in mist_apitoken .split ("," ):
279279 token = token .strip ()
280280 LOGGER .info (
281- "apisession:_load_keyring: Found MIST_APITOKEN=%s...%s" ,
282- token [:4 ],
283- token [- 4 :],
281+ "apisession:_load_keyring: Found MIST_APITOKEN=%s" ,
282+ _apitoken_sanitizer (
283+ token
284+ ), # lgtm[py/clear-text-logging-sensitive-data]
284285 )
285286 self .set_api_token (mist_apitoken )
286287 mist_user = keyring .get_password (keyring_service , "MIST_USER" )
@@ -536,9 +537,10 @@ def _get_api_token_data(self, apitoken) -> tuple[str | None, list | None]:
536537 )
537538 data_json = data .json ()
538539 LOGGER .debug (
539- "apisession:_get_api_token_data:info retrieved for token %s...%s" ,
540- apitoken [:4 ],
541- apitoken [- 4 :],
540+ "apisession:_get_api_token_data:info retrieved for token %s" ,
541+ _apitoken_sanitizer (
542+ apitoken
543+ ), # lgtm[py/clear-text-logging-sensitive-data]
542544 )
543545 except requests .exceptions .ProxyError as proxy_error :
544546 LOGGER .critical ("apisession:_get_api_token_data:proxy not valid..." )
@@ -554,10 +556,10 @@ def _get_api_token_data(self, apitoken) -> tuple[str | None, list | None]:
554556 ) from connexion_error
555557 except Exception :
556558 LOGGER .error (
557- "apisession:_get_api_token_data:"
558- "unable to retrieve info for token %s...%s" ,
559- apitoken [: 4 ],
560- apitoken [ - 4 :],
559+ "apisession:_get_api_token_data:unable to retrieve info for token %s" ,
560+ _apitoken_sanitizer (
561+ apitoken
562+ ), # lgtm[py/clear-text-logging-sensitive-data]
561563 )
562564 LOGGER .error (
563565 "apirequest:_get_api_token_data: Exception occurred" , exc_info = True
@@ -566,20 +568,21 @@ def _get_api_token_data(self, apitoken) -> tuple[str | None, list | None]:
566568
567569 if data .status_code == 401 :
568570 LOGGER .critical (
569- "apisession:_get_api_token_data:"
570- "invalid API Token %s...%s: status code %s" ,
571- apitoken [: 4 ],
572- apitoken [ - 4 :],
571+ "apisession:_get_api_token_data:invalid API Token %s: status code %s" ,
572+ _apitoken_sanitizer (
573+ apitoken
574+ ), # lgtm[py/clear-text-logging-sensitive-data]
573575 data .status_code ,
574576 )
575577 CONSOLE .critical (
576- "Invalid API Token %s...%s: status code %s\r \n " ,
577- apitoken [:4 ],
578- apitoken [- 4 :],
578+ "Invalid API Token %s: status code %s\r \n " ,
579+ _apitoken_sanitizer (
580+ apitoken
581+ ), # lgtm[py/clear-text-logging-sensitive-data]
579582 data .status_code ,
580583 )
581584 raise ValueError (
582- f"Invalid API Token { apitoken [: 4 ] } ... { apitoken [ - 4 :] } : status code { data .status_code } "
585+ f"Invalid API Token { _apitoken_sanitizer ( apitoken ) } : status code { data .status_code } "
583586 )
584587
585588 if data_json .get ("email" ):
@@ -604,11 +607,12 @@ def _get_api_token_data(self, apitoken) -> tuple[str | None, list | None]:
604607 LOGGER .error (
605608 "apisession:_check_api_tokens:"
606609 "unable to process privileges %s for the %s "
607- "token %s...%s " ,
610+ "token %s" ,
608611 priv ,
609612 token_type ,
610- apitoken [:4 ],
611- apitoken [- 4 :],
613+ _apitoken_sanitizer (
614+ apitoken
615+ ), # lgtm[py/clear-text-logging-sensitive-data]
612616 )
613617 return (token_type , token_privileges )
614618
@@ -626,32 +630,38 @@ def _check_api_tokens(self, apitokens) -> list[str]:
626630 primary_token_type : str | None = ""
627631 primary_token_value : str = ""
628632 for token in apitokens :
629- not_sensitive_data = f"{ token [:4 ]} ...{ token [- 4 :]} "
630633 if token in valid_api_tokens :
631634 LOGGER .info (
632635 "apisession:_check_api_tokens:API Token %s is already valid" ,
633- not_sensitive_data ,
636+ _apitoken_sanitizer (
637+ token
638+ ), # lgtm[py/clear-text-logging-sensitive-data]
634639 )
635640 continue
636641 (token_type , token_privileges ) = self ._get_api_token_data (token )
637642 if token_type is None or token_privileges is None :
638643 LOGGER .error (
639644 "apisession:_check_api_tokens:API Token %s is not valid" ,
640- not_sensitive_data ,
645+ _apitoken_sanitizer (
646+ token
647+ ), # lgtm[py/clear-text-logging-sensitive-data]
641648 )
642649 LOGGER .error (
643650 "API Token %s is not valid and will not be used" ,
644- not_sensitive_data ,
651+ _apitoken_sanitizer (
652+ token
653+ ), # lgtm[py/clear-text-logging-sensitive-data]
645654 )
646655 elif len (primary_token_privileges ) == 0 and token_privileges :
647656 primary_token_privileges = token_privileges
648657 primary_token_type = token_type
649- primary_token_value = not_sensitive_data
650658 valid_api_tokens .append (token )
651659 LOGGER .info (
652660 "apisession:_check_api_tokens:"
653661 "API Token %s set as primary for comparison" ,
654- not_sensitive_data ,
662+ _apitoken_sanitizer (
663+ token
664+ ), # lgtm[py/clear-text-logging-sensitive-data]
655665 )
656666 elif primary_token_privileges == token_privileges :
657667 valid_api_tokens .append (token )
@@ -660,23 +670,33 @@ def _check_api_tokens(self, apitokens) -> list[str]:
660670 "%s API Token %s has same privileges as "
661671 "the %s API Token %s" ,
662672 token_type ,
663- not_sensitive_data ,
673+ _apitoken_sanitizer (
674+ token
675+ ), # lgtm[py/clear-text-logging-sensitive-data]
664676 primary_token_type ,
665- primary_token_value ,
677+ _apitoken_sanitizer (
678+ token
679+ ), # lgtm[py/clear-text-logging-sensitive-data],
666680 )
667681 else :
668682 LOGGER .error (
669683 "apisession:_check_api_tokens:"
670684 "%s API Token %s has different privileges "
671685 "than the %s API Token %s" ,
672686 token_type ,
673- not_sensitive_data ,
687+ _apitoken_sanitizer (
688+ token
689+ ), # lgtm[py/clear-text-logging-sensitive-data]
674690 primary_token_type ,
675- primary_token_value ,
691+ _apitoken_sanitizer (
692+ token
693+ ), # lgtm[py/clear-text-logging-sensitive-data]
676694 )
677695 LOGGER .error (
678696 "API Token %s has different privileges and will not be used" ,
679- not_sensitive_data ,
697+ _apitoken_sanitizer (
698+ token
699+ ), # lgtm[py/clear-text-logging-sensitive-data]
680700 )
681701 return valid_api_tokens
682702
@@ -1233,3 +1253,21 @@ def get_privilege_by_org_id(self, org_id: str):
12331253 "msp_logo_url" : resp .data .get ("logo_url" ),
12341254 }
12351255 return {}
1256+
1257+
1258+ def _apitoken_sanitizer (apitoken : str ) -> str :
1259+ """
1260+ Return a substring of the API token to be used in the logs, to avoid
1261+ logging the full token value.
1262+
1263+ PARAMS
1264+ -----------
1265+ apitoken : str
1266+ API token value
1267+
1268+ RETURN
1269+ -----------
1270+ str
1271+ Substring of the API token to be used in the logs
1272+ """
1273+ return f"{ apitoken [:4 ]} ...{ apitoken [- 4 :]} " # lgtm[py/clear-text-logging-sensitive-data]
0 commit comments