websockify: change cfg file syntax and clean up parsing.
Config file syntax is now like this:
----------------------
# Comments and blank lines are allow
token1: host1:port1
token2: host2:port2
----------------------
This commit is contained in:
parent
52beba8695
commit
65e96176cb
45
websockify
45
websockify
|
|
@ -200,7 +200,7 @@ Traffic Legend:
|
||||||
target_host and target_port if successful
|
target_host and target_port if successful
|
||||||
"""
|
"""
|
||||||
# The files in targets contain the lines
|
# The files in targets contain the lines
|
||||||
# in the form of host:port:token
|
# in the form of token: host:port
|
||||||
|
|
||||||
# Extract the token parameter from url
|
# Extract the token parameter from url
|
||||||
args = parse_qs(urlparse(path)[4]) # 4 is the query from url
|
args = parse_qs(urlparse(path)[4]) # 4 is the query from url
|
||||||
|
|
@ -210,37 +210,26 @@ Traffic Legend:
|
||||||
|
|
||||||
token = args['token'][0].rstrip('\n')
|
token = args['token'][0].rstrip('\n')
|
||||||
|
|
||||||
# If target list is a directory, then list all files in it
|
# target_list can be a single config file or directory of
|
||||||
|
# config files
|
||||||
if os.path.isdir(target_list):
|
if os.path.isdir(target_list):
|
||||||
folder = target_list
|
cfg_files = os.listdir(target_list)
|
||||||
targets = os.listdir(target_list)
|
|
||||||
# If its a file, just add it to the list
|
|
||||||
else:
|
else:
|
||||||
folder = os.path.dirname(target_list)
|
cfg_files = [target_list]
|
||||||
targets = [os.path.basename(target_list)]
|
|
||||||
|
|
||||||
target_lines = []
|
targets = {}
|
||||||
|
for f in cfg_files:
|
||||||
|
for line in [l.strip() for l in file(f).readlines()]:
|
||||||
|
if line and not line.startswith('#'):
|
||||||
|
ttoken, target = line.split(': ')
|
||||||
|
targets[ttoken] = target.strip()
|
||||||
|
|
||||||
try:
|
self.vmsg("Target config: %s" % repr(targets))
|
||||||
# extract lines from every config file
|
|
||||||
for filename in targets:
|
|
||||||
f = open(folder + '/' + filename, 'r')
|
|
||||||
target_lines.extend(f.readlines())
|
|
||||||
except:
|
|
||||||
raise self.EClose("Could not read token file(s)")
|
|
||||||
|
|
||||||
# search for the line matching the provided token
|
if targets.has_key(token):
|
||||||
found = False
|
return targets[token].split(':')
|
||||||
for target in target_lines:
|
else:
|
||||||
host, port, file_token = target.rstrip('\n').split(':')
|
raise self.EClose("Token '%s' not found" % token)
|
||||||
if file_token == token: # found, set target
|
|
||||||
found = True
|
|
||||||
break
|
|
||||||
|
|
||||||
if not found:
|
|
||||||
raise self.EClose("Token check failed")
|
|
||||||
|
|
||||||
return host, port
|
|
||||||
|
|
||||||
def do_proxy(self, target):
|
def do_proxy(self, target):
|
||||||
"""
|
"""
|
||||||
|
|
@ -335,7 +324,7 @@ def websockify_init():
|
||||||
help="prefer IPv6 when resolving source_addr")
|
help="prefer IPv6 when resolving source_addr")
|
||||||
parser.add_option("--target-list", metavar="FILE",
|
parser.add_option("--target-list", metavar="FILE",
|
||||||
help="Configuration file containing valid targets "
|
help="Configuration file containing valid targets "
|
||||||
"in the form host:port:token or, alternatively, a "
|
"in the form 'token: host:port' or, alternatively, a "
|
||||||
"directory containing configuration files of this form")
|
"directory containing configuration files of this form")
|
||||||
(opts, args) = parser.parse_args()
|
(opts, args) = parser.parse_args()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue