This is a fork of:
https://github.com/roglew/puppy
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
3.0 KiB
119 lines
3.0 KiB
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 |
|
|
|
|