From e9670d729157de595a06e3d6434ac82d20387400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Mart=C3=ADn?= Date: Fri, 24 May 2024 12:27:48 +0200 Subject: [PATCH] chore(CLI): start working on CLI (#4067) --- cli/__init__.py | 0 cli/cli.md | 6 +++++ cli/cli.py | 63 +++++++++++++++++++++++++++++++++++++++++++++++++ poetry.lock | 4 ++-- pyproject.toml | 6 +++++ 5 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 cli/__init__.py create mode 100644 cli/cli.md create mode 100644 cli/cli.py diff --git a/cli/__init__.py b/cli/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cli/cli.md b/cli/cli.md new file mode 100644 index 0000000000..f62f22808a --- /dev/null +++ b/cli/cli.md @@ -0,0 +1,6 @@ +# CLI +To show the banner, use: +`python cli/cli.py banner` +## Listing +List services by provider. +`python cli/cli.py list-services` diff --git a/cli/cli.py b/cli/cli.py new file mode 100644 index 0000000000..9e3b8b7d0a --- /dev/null +++ b/cli/cli.py @@ -0,0 +1,63 @@ +import typer + +from prowler.lib.banner import print_banner +from prowler.lib.check.check import ( + list_fixers, + list_services, + print_fixers, + print_services, +) + +app = typer.Typer() +aws = typer.Typer(name="aws") +azure = typer.Typer(name="azure") +gcp = typer.Typer(name="gcp") +kubernetes = typer.Typer(name="kubernetes") + +app.add_typer(aws, name="aws") +app.add_typer(azure, name="azure") +app.add_typer(gcp, name="gcp") +app.add_typer(kubernetes, name="kubernetes") + + +def list_resources(provider: str, resource_type: str): + if resource_type == "services": + print_services(list_services(provider)) + elif resource_type == "fixers": + print_fixers(list_fixers(provider)) + + +def create_list_commands(provider_typer: typer.Typer): + provider_name = provider_typer.info.name + + @provider_typer.command( + "list-services", + help=f"List the {provider_name} services that are supported by Prowler.", + ) + def list_services_command(): + list_resources(provider_name, "services") + + @provider_typer.command( + "list-fixers", + help=f"List the {provider_name} fixers that are supported by Prowler.", + ) + def list_fixers_command(): + list_resources(provider_name, "fixers") + + +create_list_commands(aws) +create_list_commands(azure) +create_list_commands(gcp) +create_list_commands(kubernetes) + + +@app.command("banner", help="Prints the banner of the tool.") +def banner(show: bool = True): + if show: + print_banner(show) + else: + print("Banner is not shown.") + + +if __name__ == "__main__": + app() diff --git a/poetry.lock b/poetry.lock index 3279784b3a..58cffec88b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "about-time" @@ -4906,4 +4906,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.13" -content-hash = "39fab9048881d2893a1284d94f00cdac1e2b183665169918b20566b252746c16" +content-hash = "0ba1a37f3f5fbb2cecb16c6429fa9ed75c861ab7caeb10ee57f11eb3c5e546eb" diff --git a/pyproject.toml b/pyproject.toml index 7a74274940..8130329a87 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -70,6 +70,12 @@ slack-sdk = "3.27.2" tabulate = "0.9.0" tzlocal = "5.2" +[tool.poetry.group.cli] +optional = true + +[tool.poetry.group.cli.dependencies] +typer = "0.12.3" + [tool.poetry.group.dev.dependencies] bandit = "1.7.8" black = "24.4.2"