import copy import json default_config = """{ "listeners": [ {"iface": "127.0.0.1", "port": 8080} ], "proxy": {"use_proxy": false, "host": "", "port": 0, "is_socks": false} }""" class ProxyConfig: def __init__(self): self._listeners = [('127.0.0.1', '8080')] self._proxy = {'use_proxy': False, 'host': '', 'port': 0, 'is_socks': False} def load(self, fname): try: with open(fname, 'r') as f: config_info = json.loads(f.read()) except IOError: config_info = json.loads(default_config) with open(fname, 'w') as f: f.write(default_config) # Listeners if 'listeners' in config_info: self._listeners = [] for info in config_info['listeners']: if 'port' in info: port = info['port'] else: port = 8080 if 'interface' in info: iface = info['interface'] elif 'iface' in info: iface = info['iface'] else: iface = '127.0.0.1' self._listeners.append((iface, port)) if 'proxy' in config_info: self._proxy = config_info['proxy'] @property def listeners(self): return copy.deepcopy(self._listeners) @listeners.setter def listeners(self, val): self._listeners = val @property def proxy(self): # don't use this, use the getters to get the parsed values return self._proxy @proxy.setter def proxy(self, val): self._proxy = val @property def use_proxy(self): if self._proxy is None: return False if 'use_proxy' in self._proxy: if self._proxy['use_proxy']: return True return False @property def proxy_host(self): if self._proxy is None: return '' if 'host' in self._proxy: return self._proxy['host'] return '' @property def proxy_port(self): if self._proxy is None: return '' if 'port' in self._proxy: return self._proxy['port'] return '' @property def proxy_username(self): if self._proxy is None: return '' if 'username' in self._proxy: return self._proxy['username'] return '' @property def proxy_password(self): if self._proxy is None: return '' if 'password' in self._proxy: return self._proxy['password'] return '' @property def use_proxy_creds(self): return ('username' in self._proxy or 'password' in self._proxy) @property def is_socks_proxy(self): if self._proxy is None: return False if 'is_socks' in self._proxy: if self._proxy['is_socks']: return True return False