from pathlib import Path from typing import Dict, Any class AppConfig: """Central configuration class for the application""" # Base paths BASE_DIR = Path.home() CONFIG_DIR = BASE_DIR / ".config/wire_py" TEMP_DIR = Path("/tmp/tlecdcwg") USER_FILE = Path("/tmp/.log_user") # Configuration files SETTINGS_FILE = CONFIG_DIR / "settings" KEYS_FILE = CONFIG_DIR / "keys" AUTOSTART_SERVICE = Path.home() / ".config/systemd/user/wg_start.service" # Localization APP_NAME = "wirepy" LOCALE_DIR = "/usr/share/locale/" # Default settings DEFAULT_SETTINGS = { "updates": "on", "theme": "light", "tooltip": True, "autostart": "off" } # UI configuration UI_CONFIG = { "window_title": "Wire-Py", "window_size": (600, 383), "font_family": "Ubuntu", "font_size": 11, "resizable_window": (False, False) } # System-dependent paths SYSTEM_PATHS = { "ssl_decrypt": "/usr/local/bin/ssl_decrypt.py", "ssl_encrypt": "/usr/local/bin/ssl_encrypt.py", "tcl_path": "/usr/share/TK-Themes" } @classmethod def ensure_directories(cls) -> None: """Ensures that all required directories exist""" cls.CONFIG_DIR.mkdir(parents=True, exist_ok=True) cls.TEMP_DIR.mkdir(parents=True, exist_ok=True) @classmethod def create_default_settings(cls) -> None: """Creates default settings if they don't exist""" if not cls.SETTINGS_FILE.exists(): content = "\n".join(f"[{k.upper()}]\n{v}" for k, v in cls.DEFAULT_SETTINGS.items()) cls.SETTINGS_FILE.write_text(content) @classmethod def get_image_paths(cls) -> Dict[str, Path]: """Returns paths to UI images""" return { "main_icon": cls.CONFIG_DIR / "images/main.png", "warning": cls.CONFIG_DIR / "images/warning.png", "success": cls.CONFIG_DIR / "images/success.png", "error": cls.CONFIG_DIR / "images/error.png" } @classmethod def get_autostart_content(cls) -> str: """Returns the content for the autostart service file""" return """[Unit] Description=Automatic Tunnel Start After=network-online.target [Service] Type=oneshot ExecStartPre=/bin/sleep 5 ExecStart=/usr/local/bin/start_wg.py [Install] WantedBy=default.target"""