From c9e1e86c100a896cbee14ef6a0efc0bae6980d48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Skaza?= Date: Fri, 1 Dec 2023 07:53:27 +0100 Subject: [PATCH 1/2] do not expose helper methods as commands --- ctfcli/cli/challenges.py | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/ctfcli/cli/challenges.py b/ctfcli/cli/challenges.py index c84bc0b..e4035e2 100644 --- a/ctfcli/cli/challenges.py +++ b/ctfcli/cli/challenges.py @@ -62,7 +62,7 @@ def new(self, type: str = "blank") -> int: def edit(self, challenge: str, dockerfile: bool = False) -> int: log.debug(f"edit: {challenge} (dockerfile={dockerfile})") - challenge_instance = self.resolve_single_challenge(challenge) + challenge_instance = self._resolve_single_challenge(challenge) if not challenge_instance: return 1 @@ -94,7 +94,7 @@ def show(self, challenge: str, color=True) -> int: def view(self, challenge: str, color=True) -> int: log.debug(f"view: {challenge} (color={color})") - challenge_instance = self.resolve_single_challenge(challenge) + challenge_instance = self._resolve_single_challenge(challenge) if not challenge_instance: return 1 @@ -450,13 +450,13 @@ def install( log.debug(f"install: (challenge={challenge}, force={force}, hidden={hidden}, ignore={ignore})") if challenge: - challenge_instance = self.resolve_single_challenge(challenge) + challenge_instance = self._resolve_single_challenge(challenge) if not challenge_instance: return 1 local_challenges = [challenge_instance] else: - local_challenges = self.resolve_all_challenges() + local_challenges = self._resolve_all_challenges() if isinstance(ignore, str): ignore = (ignore,) @@ -527,13 +527,13 @@ def sync(self, challenge: str = None, ignore: Union[str, Tuple[str]] = ()) -> in log.debug(f"sync: (challenge={challenge}, ignore={ignore})") if challenge: - challenge_instance = self.resolve_single_challenge(challenge) + challenge_instance = self._resolve_single_challenge(challenge) if not challenge_instance: return 1 local_challenges = [challenge_instance] else: - local_challenges = self.resolve_all_challenges() + local_challenges = self._resolve_all_challenges() if isinstance(ignore, str): ignore = (ignore,) @@ -588,13 +588,13 @@ def deploy( log.debug(f"deploy: (challenge={challenge}, host={host}, skip_login={skip_login})") if challenge: - challenge_instance = self.resolve_single_challenge(challenge) + challenge_instance = self._resolve_single_challenge(challenge) if not challenge_instance: return 1 challenges = [challenge_instance] else: - challenges = self.resolve_all_challenges() + challenges = self._resolve_all_challenges() deployable_challenges, failed_deployments, failed_syncs = [], [], [] @@ -727,7 +727,7 @@ def lint( ) -> int: log.debug(f"lint: (challenge={challenge}, skip_hadolint={skip_hadolint}, flag_format='{flag_format}')") - challenge_instance = self.resolve_single_challenge(challenge) + challenge_instance = self._resolve_single_challenge(challenge) if not challenge_instance: return 1 @@ -745,7 +745,7 @@ def lint( def healthcheck(self, challenge: Optional[str] = None) -> int: log.debug(f"healthcheck: (challenge={challenge})") - challenge_instance = self.resolve_single_challenge(challenge) + challenge_instance = self._resolve_single_challenge(challenge) if not challenge_instance: return 1 @@ -817,13 +817,13 @@ def mirror( ) if challenge: - challenge_instance = self.resolve_single_challenge(challenge) + challenge_instance = self._resolve_single_challenge(challenge) if not challenge_instance: return 1 local_challenges = [challenge_instance] else: - local_challenges = self.resolve_all_challenges() + local_challenges = self._resolve_all_challenges() if isinstance(ignore, str): ignore = (ignore,) @@ -873,13 +873,13 @@ def verify(self, challenge: str = None, ignore: Tuple[str] = ()) -> int: log.debug(f"verify: (challenge={challenge}, ignore={ignore})") if challenge: - challenge_instance = self.resolve_single_challenge(challenge) + challenge_instance = self._resolve_single_challenge(challenge) if not challenge_instance: return 1 local_challenges = [challenge_instance] else: - local_challenges = self.resolve_all_challenges() + local_challenges = self._resolve_all_challenges() if isinstance(ignore, str): ignore = (ignore,) @@ -938,13 +938,13 @@ def format(self, challenge: Optional[str] = None) -> int: log.debug(f"format: (challenge={challenge})") if challenge: - challenge_instance = self.resolve_single_challenge(challenge) + challenge_instance = self._resolve_single_challenge(challenge) if not challenge_instance: return 1 challenges = [challenge_instance] else: - challenges = self.resolve_all_challenges() + challenges = self._resolve_all_challenges() failed_formats = [] for challenge_instance in challenges: @@ -968,7 +968,7 @@ def format(self, challenge: Optional[str] = None) -> int: return 1 @staticmethod - def resolve_single_challenge(challenge: Optional[str] = None) -> Optional[Challenge]: + def _resolve_single_challenge(challenge: Optional[str] = None) -> Optional[Challenge]: # if a challenge is specified if challenge: # check if it's a path to challenge.yml, or the current directory @@ -994,7 +994,7 @@ def resolve_single_challenge(challenge: Optional[str] = None) -> Optional[Challe return @staticmethod - def resolve_all_challenges() -> List[Challenge]: + def _resolve_all_challenges() -> List[Challenge]: config = Config() challenge_keys = config.challenges.keys() From 3445f34e8439d5ffed77d30ea4b80ca3aa71f9bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Skaza?= Date: Fri, 1 Dec 2023 08:41:09 +0100 Subject: [PATCH 2/2] additional fix for plugin loading --- ctfcli/core/plugins.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctfcli/core/plugins.py b/ctfcli/core/plugins.py index 7711245..b5896ca 100644 --- a/ctfcli/core/plugins.py +++ b/ctfcli/core/plugins.py @@ -13,7 +13,7 @@ def load_plugins(commands: Dict): sys.path.insert(0, str(plugins_path.absolute())) for plugin in sorted(plugins_path.iterdir()): - if plugin.name.startswith("_"): + if plugin.name.startswith("_") or plugin.name.startswith("."): continue plugin_path = plugins_path / plugin / "__init__.py"