diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index f968e4d..498753f 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -5,8 +5,9 @@ "postCreateCommand": "pip install -e .", "customizations": { "vscode": { - // "settings": { - // }, + "settings": { + "python.analysis.typeCheckingMode": "strict" + }, "extensions": [ "davidanson.vscode-markdownlint", "redhat.vscode-yaml", diff --git a/codresh-support-package.env b/codresh-support-package.env new file mode 100644 index 0000000..0309f0c --- /dev/null +++ b/codresh-support-package.env @@ -0,0 +1,3 @@ +CF_API_KEY= +CF_URL= +USERPROFILE= \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 1158a6c..c01dee0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,8 @@ dependencies = [ "click>=8.1", "kubernetes>=31.1", "PyYAML>=6.0", - "requests>=2.32" + "requests>=2.32", + "python-dotenv>=1.1.1" ] [project.scripts] diff --git a/src/cf_support/logic/codefresh.py b/src/cf_support/logic/codefresh.py deleted file mode 100644 index b6303ad..0000000 --- a/src/cf_support/logic/codefresh.py +++ /dev/null @@ -1,75 +0,0 @@ -import os -import yaml -import requests - -def get_codefresh_credentials(): - env_token = os.getenv("CF_API_KEY") - env_url = os.getenv("CF_URL") - - if env_token and env_url: - return { - "headers": {"Authorization": env_token}, - "base_url": f"{env_url}/api", - } - - config_path = ( - f"{os.getenv('USERPROFILE')}/.cfconfig" - if os.name == "nt" - else f"{os.getenv('HOME')}/.cfconfig" - ) - - with open(config_path, "r") as config_file: - config = yaml.safe_load(config_file) - - current_context = config["contexts"].get(config["current-context"]) - - if not current_context: - return None - - return { - "headers": {"Authorization": current_context["token"]}, - "base_url": f"{current_context['url']}/api", - } - -def get_account_runtimes(cf_creds): - response = requests.get( - f"{cf_creds['base_url']}/runtime-environments", - headers=cf_creds["headers"], - ) - return response.json() - -def get_runtime_spec(cf_creds, runtime): - response = requests.get( - f"{cf_creds['base_url']}/runtime-environments/{runtime}", - headers=cf_creds["headers"], - ) - return response.json() - -def get_all_accounts(cf_creds): - response = requests.get( - f"{cf_creds['base_url']}/admin/accounts", - headers=cf_creds["headers"], - ) - return response.json() - -def get_all_runtimes(cf_creds): - response = requests.get( - f"{cf_creds['base_url']}/admin/runtime-environments", - headers=cf_creds["headers"], - ) - return response.json() - -def get_total_users(cf_creds): - response = requests.get( - f"{cf_creds['base_url']}/admin/user?limit=1&page=1", - headers=cf_creds["headers"], - ) - users = response.json() - return {"totalUsers": users["total"]} - -def get_system_feature_flags(cf_creds): - response = requests.get( - f"{cf_creds['base_url']}/admin/features", - headers=cf_creds["headers"], - ) - return response.json() \ No newline at end of file diff --git a/src/cf_support/logic/controllers/account_controller.py b/src/cf_support/logic/controllers/account_controller.py new file mode 100644 index 0000000..a5a08a2 --- /dev/null +++ b/src/cf_support/logic/controllers/account_controller.py @@ -0,0 +1,14 @@ +import requests + + +class AccountController: + def __init__(self, cf_creds: dict[str, dict[str, str]]) -> None: + self.base_url = cf_creds["base_url"] + self.auth_headers = cf_creds["headers"] + + def get_runtimes(self): + response = requests.get( + f"{self.base_url}/runtime-environments", + headers=self.auth_headers["headers"], # type: ignore + ) + return response.json() diff --git a/src/cf_support/logic/controllers/auth_controller.py b/src/cf_support/logic/controllers/auth_controller.py new file mode 100644 index 0000000..1c65ca6 --- /dev/null +++ b/src/cf_support/logic/controllers/auth_controller.py @@ -0,0 +1,48 @@ +import yaml +import os + + +class AuthController: + def __init__(self, env_token: str | None, env_url: str | None) -> None: + self.env_token = env_token + self.env_url = env_url + + def get_cf_credentials( + self, + ) -> dict[str, dict[str, str] | str] | None: + env_token = self.env_token + env_url = self.env_url + cf_credentials: dict[str, dict[str, str] | str] | None = None + + if env_token and env_url: + auth_header: dict[str, str] = {"Authorization": env_token} + + cf_credentials = { + "headers": auth_header, + "base_url": f"{env_url}/api", + } + + else: + config_path = ( + f"{os.getenv('USERPROFILE')}/.cfconfig" + if os.name == "nt" + else f"{os.getenv('HOME')}/.cfconfig" + ) + + with open(config_path, "r") as config_file: + config = yaml.safe_load(config_file) + + current_context = config["contexts"].get(config["current-context"]) + + if current_context: + context_token = current_context["token"] + context_url = current_context["url"] + + if context_token and context_url: + auth_header = {"Authorization": context_token} + cf_credentials = { + "headers": auth_header, + "base_url": f"{context_url}/api", + } + + return cf_credentials diff --git a/src/cf_support/logic/controllers/runtime_controller.py b/src/cf_support/logic/controllers/runtime_controller.py new file mode 100644 index 0000000..55bf49b --- /dev/null +++ b/src/cf_support/logic/controllers/runtime_controller.py @@ -0,0 +1,14 @@ +import requests + + +class RuntimeController: + def __init__(self, cf_creds: dict[str, dict[str, str]]) -> None: + self.base_url = cf_creds["base_url"] + self.auth_headers = cf_creds["headers"] + + def get_spec(self, runtime_name: str): + response = requests.get( + f"{self.base_url}/runtime-environments/{runtime_name}", + headers=self.auth_headers, + ) + return response.json() diff --git a/src/cf_support/logic/controllers/system_controller.py b/src/cf_support/logic/controllers/system_controller.py new file mode 100644 index 0000000..28a259c --- /dev/null +++ b/src/cf_support/logic/controllers/system_controller.py @@ -0,0 +1,37 @@ +import requests + + +class SystemController: + def __init__(self, cf_creds: dict[str, dict[str, str]]) -> None: + self.base_url = cf_creds["base_url"] + self.auth_headers = cf_creds["headers"] + + def get_all_accounts(self): + response = requests.get( + f"{self.base_url}/admin/accounts", + headers=self.auth_headers, + ) + return response.json() + + def get_all_runtimes(self): + response = requests.get( + f"{self.base_url}/admin/runtime-environments", + headers=self.auth_headers, + ) + return response.json() + + def get_feature_flags(self): + response = requests.get( + f"{self.base_url}/admin/features", + headers=self.auth_headers, + ) + return response.json() + + def get_total_users(self): + response = requests.get( + f"{self.base_url}/admin/user?limit=1&page=1", + headers=self.auth_headers, + ) + users = response.json() + + return {"totalUsers": users["total"]} diff --git a/src/cf_support/logic/controllers/user_controller.py b/src/cf_support/logic/controllers/user_controller.py new file mode 100644 index 0000000..e69de29 diff --git a/src/cf_support/logic/main.py b/src/cf_support/logic/main.py new file mode 100644 index 0000000..58ca014 --- /dev/null +++ b/src/cf_support/logic/main.py @@ -0,0 +1,14 @@ +from dotenv import load_dotenv +import os + +from .controllers.auth_controller import AuthController + +load_dotenv() + +def main(): + env_token = os.getenv("CF_API_KEY") + env_url = os.getenv("CF_URL") + auth_controller = AuthController(env_token, env_url) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/src/cf_support/logic/models/STUB b/src/cf_support/logic/models/STUB new file mode 100644 index 0000000..e69de29