From 2860340c702021759f4acf0b0a9892827a353561 Mon Sep 17 00:00:00 2001 From: Daniel Deutsch Date: Tue, 5 Aug 2025 12:43:23 +0000 Subject: [PATCH] Updated pyproject and renamed cli to cbw_cli --- {cli => cbw_cli}/README.md | 0 {cli => cbw_cli}/__init__.py | 0 {cli => cbw_cli}/bin/__init__.py | 0 {cli => cbw_cli}/bin/airgap/__init__.py | 2 +- .../bin/airgap/download_compliance_scripts.py | 2 +- .../bin/airgap/download_scripts.py | 0 .../bin/airgap/upload_compliance_scripts.py | 0 {cli => cbw_cli}/bin/airgap/upload_scripts.py | 0 {cli => cbw_cli}/bin/os.py | 0 cbw_cli/cyberwatch_cli.py | 90 +++++++++++++++++++ cli/cyberwatch-cli | 84 ----------------- pyproject.toml | 26 ++++++ setup.py | 18 ---- 13 files changed, 118 insertions(+), 104 deletions(-) rename {cli => cbw_cli}/README.md (100%) rename {cli => cbw_cli}/__init__.py (100%) rename {cli => cbw_cli}/bin/__init__.py (100%) rename {cli => cbw_cli}/bin/airgap/__init__.py (91%) rename {cli => cbw_cli}/bin/airgap/download_compliance_scripts.py (98%) rename {cli => cbw_cli}/bin/airgap/download_scripts.py (100%) rename {cli => cbw_cli}/bin/airgap/upload_compliance_scripts.py (100%) rename {cli => cbw_cli}/bin/airgap/upload_scripts.py (100%) rename {cli => cbw_cli}/bin/os.py (100%) create mode 100755 cbw_cli/cyberwatch_cli.py delete mode 100755 cli/cyberwatch-cli delete mode 100644 setup.py diff --git a/cli/README.md b/cbw_cli/README.md similarity index 100% rename from cli/README.md rename to cbw_cli/README.md diff --git a/cli/__init__.py b/cbw_cli/__init__.py similarity index 100% rename from cli/__init__.py rename to cbw_cli/__init__.py diff --git a/cli/bin/__init__.py b/cbw_cli/bin/__init__.py similarity index 100% rename from cli/bin/__init__.py rename to cbw_cli/bin/__init__.py diff --git a/cli/bin/airgap/__init__.py b/cbw_cli/bin/airgap/__init__.py similarity index 91% rename from cli/bin/airgap/__init__.py rename to cbw_cli/bin/airgap/__init__.py index 08a402a..137e518 100644 --- a/cli/bin/airgap/__init__.py +++ b/cbw_cli/bin/airgap/__init__.py @@ -1,5 +1,5 @@ import sys -from cli.bin.airgap import download_scripts, download_compliance_scripts, upload_scripts, upload_compliance_scripts +from cbw_cli.bin.airgap import download_scripts, download_compliance_scripts, upload_scripts, upload_compliance_scripts def help(): print("Usage : cyberwatch-cli airgap [COMMAND] [ARGS]") diff --git a/cli/bin/airgap/download_compliance_scripts.py b/cbw_cli/bin/airgap/download_compliance_scripts.py similarity index 98% rename from cli/bin/airgap/download_compliance_scripts.py rename to cbw_cli/bin/airgap/download_compliance_scripts.py index d659430..c35b041 100644 --- a/cli/bin/airgap/download_compliance_scripts.py +++ b/cbw_cli/bin/airgap/download_compliance_scripts.py @@ -1,6 +1,6 @@ from os.path import abspath, join import os -from cli.bin import os as cbw_os +from cbw_cli.bin import os as cbw_os import argparse import sys import shutil diff --git a/cli/bin/airgap/download_scripts.py b/cbw_cli/bin/airgap/download_scripts.py similarity index 100% rename from cli/bin/airgap/download_scripts.py rename to cbw_cli/bin/airgap/download_scripts.py diff --git a/cli/bin/airgap/upload_compliance_scripts.py b/cbw_cli/bin/airgap/upload_compliance_scripts.py similarity index 100% rename from cli/bin/airgap/upload_compliance_scripts.py rename to cbw_cli/bin/airgap/upload_compliance_scripts.py diff --git a/cli/bin/airgap/upload_scripts.py b/cbw_cli/bin/airgap/upload_scripts.py similarity index 100% rename from cli/bin/airgap/upload_scripts.py rename to cbw_cli/bin/airgap/upload_scripts.py diff --git a/cli/bin/os.py b/cbw_cli/bin/os.py similarity index 100% rename from cli/bin/os.py rename to cbw_cli/bin/os.py diff --git a/cbw_cli/cyberwatch_cli.py b/cbw_cli/cyberwatch_cli.py new file mode 100755 index 0000000..6d2cce0 --- /dev/null +++ b/cbw_cli/cyberwatch_cli.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python + +from cyberwatch_api import Cyberwatch_Pyhelper +import sys +from cbw_cli.bin import os, airgap +import requests +from urllib3.exceptions import InsecureRequestWarning + +# Disable certificate check warnings +requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning) + +def help(): + print("Usage : cyberwatch-cli [OPTIONS] [COMMAND] [ARGS]") + print("---") + print("Cli to interact with Cyberwatch API.\n") + print("\n") + print("\t{: <15} \t {}".format("OPTIONS", "DESCRIPTION")) + print("\t{: <15} \t {}".format("---", "---")) + print("\t{: <15} \t {}".format("--verify-ssl", "Using this options, SSL verification will be done")) + print("\t{: <15} \t {}".format("--api-url", "Set the URL of the Cyberwatch API")) + print("\t{: <15} \t {}".format("--api-key", "Set the KEY of the Cyberwatch API")) + print("\t{: <15} \t {}".format("--api-secret", "Set the SECRET KEY of the Cyberwatch API")) + print("\n") + print("{: >15} \t {}".format("COMMAND", "DESCRIPTION")) + print("{: >15} \t {}".format("---", "---")) + print("{: >15} \t {}".format("os", "Manage cyberwatch operating systems")) + print("{: >15} \t {}".format("airgap", "Interact with the airgap interface")) + print("{: >15} \t {}".format("ping", "Ping the Cyberwatch API to validate the connexion")) + print("\n") + +def ping(CBW_API, verify_ssl=False, verbose=False): + apiResponse = CBW_API.request( + method="GET", + endpoint="/api/v3/ping", + verify_ssl=verify_ssl + ) + if verbose: + print("Trying to ping Cyberwatch API...") + response = next(apiResponse).json() + if verbose: + print(response) + if response.get("error") is not None: + print("Failed ping to Cyberwatch API, exiting...") + sys.exit(1) + +def main(): + arguments = sys.argv[1:] + + try: + # Check if we should verify the SSL Certificate + VERIFY_SSL = False + if "--verify-ssl" in arguments: + VERIFY_SSL = True + arguments.remove("--verify-ssl") + + # Initializing API Client + try: + # Parsing API DATA if specified in command line + API_DATA = [None, None, None] + for index, data in enumerate(["--api-url", "--api-key", "--api-secret"]): + if data in arguments and len(arguments) > arguments.index(data) + 1: + API_DATA[index] = arguments[arguments.index(data) + 1] + arguments.remove(data) + arguments.remove(API_DATA[index]) + # Creating API Client + CBW_API = Cyberwatch_Pyhelper(api_url = API_DATA[0], api_key = API_DATA[1], api_secret = API_DATA[2]) + except Exception as e: # Catching error raised by API Client if not api data is found (via arguments, api.conf or environnement variables) + help() + print("[-] ERROR : " + str(e)) + sys.exit(1) + + if not arguments or arguments[0] == "help": + help() + elif arguments[0] == "ping": + ping(CBW_API, VERIFY_SSL, True) + elif arguments[0] == "os": + ping(CBW_API, VERIFY_SSL) + os.manager(arguments[1:], CBW_API, VERIFY_SSL) + elif arguments[0] == "airgap": + ping(CBW_API, VERIFY_SSL) + airgap.manager(arguments[1:], CBW_API, VERIFY_SSL) + else: + print("ERROR : '" + str(arguments[0]) + "' is not a valid command\n---", file=sys.stderr) + help() + except Exception as exception: + print(exception) + sys.exit(1) + +if __name__ == "__main__": + main() diff --git a/cli/cyberwatch-cli b/cli/cyberwatch-cli deleted file mode 100755 index 99714a8..0000000 --- a/cli/cyberwatch-cli +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env python - -from cyberwatch_api import Cyberwatch_Pyhelper -import sys -from cli.bin import os, airgap -import requests -from urllib3.exceptions import InsecureRequestWarning - -# Disable certificate check warnings -requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning) - -def help(): - print("Usage : cyberwatch-cli [OPTIONS] [COMMAND] [ARGS]") - print("---") - print("Cli to interact with Cyberwatch API.\n") - print("\n") - print("\t{: <15} \t {}".format("OPTIONS", "DESCRIPTION")) - print("\t{: <15} \t {}".format("---", "---")) - print("\t{: <15} \t {}".format("--verify-ssl", "Using this options, SSL verification will be done")) - print("\t{: <15} \t {}".format("--api-url", "Set the URL of the Cyberwatch API")) - print("\t{: <15} \t {}".format("--api-key", "Set the KEY of the Cyberwatch API")) - print("\t{: <15} \t {}".format("--api-secret", "Set the SECRET KEY of the Cyberwatch API")) - print("\n") - print("{: >15} \t {}".format("COMMAND", "DESCRIPTION")) - print("{: >15} \t {}".format("---", "---")) - print("{: >15} \t {}".format("os", "Manage cyberwatch operating systems")) - print("{: >15} \t {}".format("airgap", "Interact with the airgap interface")) - print("{: >15} \t {}".format("ping", "Ping the Cyberwatch API to validate the connexion")) - print("\n") - -def ping(CBW_API, verify_ssl=False, verbose=False): - apiResponse = CBW_API.request( - method="GET", - endpoint="/api/v3/ping", - verify_ssl=verify_ssl - ) - if verbose : print("Trying to ping Cyberwatch API...") - response = next(apiResponse).json() - if verbose: print(response) - if response.get("error") is not None: - print("Failed ping to Cyberwatch API, exiting...") - sys.exit(1) - -arguments = sys.argv[1:] - -try: - # Check if we should verify the SSL Certificate - VERIFY_SSL = False - if "--verify-ssl" in arguments: - VERIFY_SSL = True - arguments.remove("--verify-ssl") - - # Initializing API Client - try: - # Parsing API DATA if specified in command line - API_DATA = [None, None, None] - for index, data in enumerate(["--api-url", "--api-key", "--api-secret"]): - if data in arguments and len(arguments) > arguments.index(data) + 1: - API_DATA[index] = arguments[arguments.index(data) + 1] - arguments.remove(data) - arguments.remove(API_DATA[index]) - # Creating API Client - CBW_API = Cyberwatch_Pyhelper(api_url = API_DATA[0], api_key = API_DATA[1], api_secret = API_DATA[2]) - except Exception as e: # Catching error raised by API Client if not api data is found (via arguments, api.conf or environnement variables) - help() - print("[-] ERROR : " + str(e)) - sys.exit(1) - - if not arguments or arguments[0] == "help": - help() - elif arguments[0] == "ping": - ping(CBW_API, VERIFY_SSL, True) - elif arguments[0] == "os": - ping(CBW_API, VERIFY_SSL) - os.manager(arguments[1:], CBW_API, VERIFY_SSL) - elif arguments[0] == "airgap": - ping(CBW_API, VERIFY_SSL) - airgap.manager(arguments[1:], CBW_API, VERIFY_SSL) - else: - print("ERROR : '" + str(arguments[0]) + "' is not a valid command\n---", file=sys.stderr) - help() -except Exception as exception: - print(exception) - sys.exit(1) diff --git a/pyproject.toml b/pyproject.toml index 6dbd43f..73ba70c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,2 +1,28 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "cyberwatch_api" +version = "0.3.2" +description = "Python Api client for the Cyberwatch software" +readme = "README.md" +license = "MIT" +authors = [{name = "CyberWatch SAS"}] +requires-python = ">=3.6" +dependencies = [ + "requests>=2.20.1", + "chardet" +] + +[project.scripts] +cyberwatch-cli = "cbw_cli.cyberwatch_cli:main" + +[tool.setuptools] +py-modules = ["cyberwatch_api"] + +[tool.setuptools.packages.find] +include = ["cbw_cli*", "*"] + [tool.ruff] line-length = 120 diff --git a/setup.py b/setup.py deleted file mode 100644 index 457b018..0000000 --- a/setup.py +++ /dev/null @@ -1,18 +0,0 @@ -from setuptools import setup, find_packages - -setup( - name='cyberwatch_api', - version='0.3.10', - description='Python Api client for the Cyberwatch software', - long_description=open('README.md').read().strip(), - long_description_content_type="text/markdown", - author='CyberWatch SAS', - py_modules=['cyberwatch_api'], - packages=find_packages(include=['cli.*']), - license='MIT', - install_requires=[ - 'requests>=2.20.1', - 'chardet' - ], - scripts=['cli/cyberwatch-cli'] -)