diff options
author | Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> | 2024-05-02 13:21:48 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-02 11:21:48 +0000 |
commit | 18115e4e91adb6632dabee7bd8577f08798efa08 (patch) | |
tree | ad98eb2c7258d0777ec6f2e89a8936f07e92bc58 | |
parent | 409703387bd37e4ed16101d2e31e7a31cf84de46 (diff) |
[Enhancement] - Sanitize sensitive data from `.cli.his` (#6361)
* Sanitize sensitive data from .cli.his
* fix long command providers
---------
Co-authored-by: Diogo Sousa <montezdesousa@gmail.com>
-rw-r--r-- | cli/openbb_cli/config/completer.py | 24 | ||||
-rw-r--r-- | cli/openbb_cli/config/menu_text.py | 2 | ||||
-rw-r--r-- | cli/openbb_cli/session.py | 4 |
3 files changed, 27 insertions, 3 deletions
diff --git a/cli/openbb_cli/config/completer.py b/cli/openbb_cli/config/completer.py index f084c821478..9cc50a9b7eb 100644 --- a/cli/openbb_cli/config/completer.py +++ b/cli/openbb_cli/config/completer.py @@ -16,6 +16,7 @@ from typing import ( from prompt_toolkit.completion import CompleteEvent, Completer, Completion from prompt_toolkit.document import Document from prompt_toolkit.formatted_text import AnyFormattedText +from prompt_toolkit.history import FileHistory NestedDict = Mapping[str, Union[Any, Set[str], None, Completer]] @@ -401,3 +402,26 @@ class NestedCompleter(Completer): # This is a WordCompleter yield from completer.get_completions(document, complete_event) + + +class CustomFileHistory(FileHistory): + """Filtered file history.""" + + def sanitize_input(self, string: str) -> str: + """Sanitize sensitive information from the input string by parsing arguments.""" + keywords = ["--password", "--email", "--pat"] + string_list = string.split(" ") + + for kw in keywords: + if kw in string_list: + index = string_list.index(kw) + if len(string_list) > index + 1: + string_list[index + 1] = "********" + + result = " ".join(string_list) + return result + + def store_string(self, string: str) -> None: + """Store string in history.""" + string = self.sanitize_input(string) + super().store_string(string) diff --git a/cli/openbb_cli/config/menu_text.py b/cli/openbb_cli/config/menu_text.py index d9bdc59656c..0902e72bb69 100644 --- a/cli/openbb_cli/config/menu_text.py +++ b/cli/openbb_cli/config/menu_text.py @@ -204,7 +204,7 @@ class MenuText: """ formatted_name = self._format_cmd_name(name) name_padding = (self.CMD_NAME_LENGTH - len(formatted_name)) * " " - providers = get_ordered_providers(f"{self.menu_path}{formatted_name}") + providers = get_ordered_providers(f"{self.menu_path}{name}") formatted_description = self._format_cmd_description( formatted_name, description, diff --git a/cli/openbb_cli/session.py b/cli/openbb_cli/session.py index 96b63f10da9..ef63fd6e7f0 100644 --- a/cli/openbb_cli/session.py +++ b/cli/openbb_cli/session.py @@ -8,8 +8,8 @@ from openbb import obb from openbb_core.app.model.abstract.singleton import SingletonMeta from openbb_core.app.model.user_settings import UserSettings as User from prompt_toolkit import PromptSession -from prompt_toolkit.history import FileHistory +from openbb_cli.config.completer import CustomFileHistory from openbb_cli.config.console import Console from openbb_cli.config.constants import HIST_FILE_PROMPT from openbb_cli.config.style import Style @@ -62,7 +62,7 @@ class Session(metaclass=SingletonMeta): try: if sys.stdin.isatty(): prompt_session: Optional[PromptSession] = PromptSession( - history=FileHistory(str(HIST_FILE_PROMPT)) + history=CustomFileHistory(str(HIST_FILE_PROMPT)) ) else: prompt_session = None |