dia-gov's picture
Upload 102 files
2f3c093 verified
import logging
import json
from enum import Enum
class SettingType(Enum):
STRING = "string"
INTEGER = "integer"
BOOLEAN = "boolean"
FLOAT = "float"
LIST = "list"
DICT = "dict"
class SettingsManager:
def __init__(self, logger: logging.Logger, default_source: str = None):
self.logger = logger
self.settings = self._load_default_settings(default_source)
def _load_default_settings(self, source: str = None) -> dict:
if source is None:
self.logger.info("Loading built-in default settings.")
return {
"general": {
"log_level": {"value": "INFO", "description": "Logging level", "type": SettingType.STRING, "category": "General", "read_only": False, "placeholder": "INFO, DEBUG, WARNING, ERROR, CRITICAL"},
"api_key": {"value": "", "description": "API Key", "type": SettingType.STRING, "category": "General", "read_only": False, "placeholder": "API Key"},
"timeout": {"value": 10, "description": "Default timeout for requests", "type": SettingType.INTEGER, "category": "General", "read_only": False, "placeholder": "Timeout in seconds"},
},
"network": {
"default_interface": {"value": "eth0", "description": "Default network interface", "type": SettingType.STRING, "category": "Network", "read_only": False, "placeholder": "Interface Name"},
"dns_resolver": {"value": "8.8.8.8", "description": "Default DNS resolver", "type": SettingType.STRING, "category": "Network", "read_only": False, "placeholder": "DNS IP Address"},
"proxy_rotation_interval": {"value": 60, "description": "Proxy rotation interval", "type": SettingType.INTEGER, "category": "Network", "read_only": False, "placeholder": "Seconds"},
},
"file_binding": {
"file_binding_output": {"value": "", "description": "File binding output", "type": SettingType.STRING, "category": "File Binding", "read_only": False, "placeholder": "Output File"},
"file_binding_icon": {"value": "", "description": "File binding icon", "type": SettingType.STRING, "category": "File Binding", "read_only": False, "placeholder": "Icon File"},
"file_binding_payload": {"value": "", "description": "File binding payload", "type": SettingType.STRING, "category": "File Binding", "read_only": False, "placeholder": "Payload File"},
}
}
elif isinstance(source, str):
try:
with open(source, "r") as f:
return json.load(f)
except (FileNotFoundError, json.JSONDecodeError) as e:
self.logger.error(f"Error loading default settings from {source}: {e}, using built-in defaults")
return self._load_default_settings(None)
else:
self.logger.error(f"Invalid default settings source: {source}, using built-in defaults")
return self._load_default_settings(None)
def get_settings(self) -> dict:
return self.settings
def get_setting(self, category: str, key: str) -> Any:
if category in self.settings and key in self.settings[category]:
return self.settings[category][key]["value"]
else:
self.logger.warning(f"Setting not found: {category}.{key}")
return None
def set_setting(self, category: str, key: str, value: Any):
if category in self.settings and key in self.settings[category]:
self.settings[category][key]["value"] = value
self.logger.info(f"Set setting {category}.{key} to {value}")
else:
self.logger.warning(f"Setting not found: {category}.{key}")
def save_settings(self, filepath: str):
try:
with open(filepath, "w") as f:
json.dump(self.settings, f, indent=4)
self.logger.info(f"Settings saved to {filepath}")
except Exception as e:
self.logger.error(f"Error saving settings to {filepath}: {e}")
def display_settings(self):
for category, settings in self.settings.items():
self.logger.info(f"--- {category} ---")
for key, setting_data in settings.items():
self.logger.info(f" {key}: {setting_data}")
def sanitize_local_logs(self):
self.logger.info("Sanitizing local logs (implementation pending)")
def sanitize_remote_logs(self):
self.logger.info("Sanitizing remote logs (implementation pending)")