from core.Errors import UnknownConnectionTypeError from core.models.Configuration import Configuration, ConnectionChoice from datetime import datetime, timezone from typing import Optional class ConfigurationController: _config: Optional[Configuration] = None @staticmethod def get(): if ConfigurationController._config is None: ConfigurationController._config = Configuration.get() return ConfigurationController._config # return Configuration.get() @staticmethod def reload_from_disk(): ConfigurationController._config = None @staticmethod def get_or_new(): configuration = ConfigurationController.get() if configuration is None: return Configuration() return configuration @staticmethod def get_connection(): configuration = ConfigurationController.get() return configuration.connection.value @staticmethod def get_connection_enum(): configuration = ConfigurationController.get() return configuration.connection @staticmethod def set_connection(connection_string: Optional[str] = None): configuration = ConfigurationController.get_or_new() if connection_string == "tor": connection = ConnectionChoice.TOR elif connection_string == "system": connection = ConnectionChoice.SYSTEM else: raise UnknownConnectionTypeError(f'The choice of {connection_string} is not valid.') configuration.connection = connection configuration.save() @staticmethod def get_auto_sync_enabled(): configuration = ConfigurationController.get() if configuration is None: return False return configuration.auto_sync_enabled @staticmethod def set_auto_sync_enabled(enable_auto_sync: Optional[bool] = None): configuration = ConfigurationController.get_or_new() configuration.auto_sync_enabled = enable_auto_sync configuration.save() @staticmethod def get_endpoint_verification_enabled(): configuration = ConfigurationController.get() if configuration is None: return True return configuration.endpoint_verification_enabled @staticmethod def set_endpoint_verification_enabled(enable_endpoint_verification: Optional[bool] = None): configuration = ConfigurationController.get_or_new() configuration.endpoint_verification_enabled = enable_endpoint_verification configuration.save() @staticmethod def get_last_synced_at(): configuration = ConfigurationController.get() if configuration is None: return None return configuration.last_synced_at @staticmethod def update_last_synced_at(): configuration = ConfigurationController.get_or_new() configuration.last_synced_at = datetime.now(timezone.utc) configuration.save() @staticmethod def update_or_create(configuration): configuration.save() @staticmethod def change_firewall(new_value): configuration = ConfigurationController.get_or_new() configuration.firewall = new_value configuration.save() @staticmethod def get_firewall_setting(): configuration = ConfigurationController.get_or_new() return configuration.firewall @staticmethod def change_dns(new_value): configuration = ConfigurationController.get_or_new() configuration.dns = new_value configuration.save()