# Copyright (C) 2025 James Brotosky, Brandon Wickline # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # TODO Continue implementing logger # TODO Add input sanitation and CSV injection prevention # TODO Continue OTP and Local approval rewrites # TODO Explore pywin32 # TODO Fix Requirements.txt # TODO Create Generic system_config.json for gitea import logging import os import urllib3 from services.API import AirlockAPIWrapper from services.security import getAPI from TUI.TUI import run_Loxide from utils.configmanager import get_system_value from utils.setup import setup from utils.utils import irtang urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) def main(): irtang() # Determine working directory, setup directory, configure logging, sent env, get API and URL if not already stored setup() logger = logging.getLogger(__name__) try: url = get_system_value("URL") username = os.getenv("USERNAME") if not url: raise ValueError("Missing URL in environment variables.") if not username: raise ValueError("Missing USERNAME in environment variables.") logger.debug(f"Retrieved URL: {url}") logger.debug(f"Retrieved Username: {username}") except ValueError as e: logger.error(f"Configuration error: {e}", exc_info=True) raise api_key = getAPI(username, "Loxide") if api_key is None: raise ValueError("API key for Loxide is missing.") api = AirlockAPIWrapper( base_url=str(url), api_key=api_key, ) run_Loxide(api) if __name__ == "__main__": main()