119 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 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
 | |
| 
 |