Merge branches 'use_logging' and 'fix_logging_configuration' of https://github.com/javicacheiro/websockify

This commit is contained in:
Pierre Ossman 2022-04-14 09:15:21 +02:00
commit d0ad4a1b2a
2 changed files with 38 additions and 31 deletions

View File

@ -1,8 +1,12 @@
import logging
import os import os
import sys import sys
import time import time
import re import re
logger = logging.getLogger(__name__)
class BasePlugin(): class BasePlugin():
def __init__(self, src): def __init__(self, src):
self.source = src self.source = src
@ -35,7 +39,7 @@ class ReadOnlyTokenFile(BasePlugin):
tok, target = re.split(':\s', line) tok, target = re.split(':\s', line)
self._targets[tok] = target.strip().rsplit(':', 1) self._targets[tok] = target.strip().rsplit(':', 1)
except ValueError: except ValueError:
print("Syntax error in %s on line %d" % (self.source, index), file=sys.stderr) logger.error("Syntax error in %s on line %d" % (self.source, index))
index += 1 index += 1
def lookup(self, token): def lookup(self, token):
@ -108,7 +112,7 @@ class JWTTokenApi(BasePlugin):
with open(self.source, 'rb') as key_file: with open(self.source, 'rb') as key_file:
key_data = key_file.read() key_data = key_file.read()
except Exception as e: except Exception as e:
print("Error loading key file: %s" % str(e), file=sys.stderr) logger.error("Error loading key file: %s" % str(e))
return None return None
try: try:
@ -117,7 +121,7 @@ class JWTTokenApi(BasePlugin):
try: try:
key.import_key(k=key_data.decode('utf-8'),kty='oct') key.import_key(k=key_data.decode('utf-8'),kty='oct')
except: except:
print('Failed to correctly parse key data!', file=sys.stderr) logger.error('Failed to correctly parse key data!')
return None return None
try: try:
@ -133,21 +137,21 @@ class JWTTokenApi(BasePlugin):
if 'nbf' in parsed: if 'nbf' in parsed:
# Not Before is present, so we need to check it # Not Before is present, so we need to check it
if time.time() < parsed['nbf']: if time.time() < parsed['nbf']:
print('Token can not be used yet!', file=sys.stderr) logger.warning('Token can not be used yet!')
return None return None
if 'exp' in parsed: if 'exp' in parsed:
# Expiration time is present, so we need to check it # Expiration time is present, so we need to check it
if time.time() > parsed['exp']: if time.time() > parsed['exp']:
print('Token has expired!', file=sys.stderr) logger.warning('Token has expired!')
return None return None
return (parsed['host'], parsed['port']) return (parsed['host'], parsed['port'])
except Exception as e: except Exception as e:
print("Failed to parse token: %s" % str(e), file=sys.stderr) logger.error("Failed to parse token: %s" % str(e))
return None return None
except ImportError as e: except ImportError:
print("package jwcrypto not found, are you sure you've installed it correctly?", file=sys.stderr) logger.error("package jwcrypto not found, are you sure you've installed it correctly?")
return None return None
class TokenRedis(): class TokenRedis():
@ -172,14 +176,14 @@ class TokenRedis():
import redis import redis
import simplejson import simplejson
self._server, self._port = src.split(":") self._server, self._port = src.split(":")
print("TokenRedis backend initilized (%s:%s)" % logger.info("TokenRedis backend initilized (%s:%s)" %
(self._server, self._port), file=sys.stderr) (self._server, self._port))
except ValueError: except ValueError:
print("The provided --token-source='%s' is not in an expected format <host>:<port>" % logger.error("The provided --token-source='%s' is not in an expected format <host>:<port>" %
src, file=sys.stderr) src)
sys.exit() sys.exit()
except ImportError: except ImportError:
print("package redis or simplejson not found, are you sure you've installed them correctly?", file=sys.stderr) logger.error("package redis or simplejson not found, are you sure you've installed them correctly?")
sys.exit() sys.exit()
def lookup(self, token): def lookup(self, token):
@ -187,20 +191,20 @@ class TokenRedis():
import redis import redis
import simplejson import simplejson
except ImportError: except ImportError:
print("package redis or simplejson not found, are you sure you've installed them correctly?", file=sys.stderr) logger.error("package redis or simplejson not found, are you sure you've installed them correctly?")
sys.exit() sys.exit()
print("resolving token '%s'" % token, file=sys.stderr) logger.info("resolving token '%s'" % token)
client = redis.Redis(host=self._server, port=self._port) client = redis.Redis(host=self._server, port=self._port)
stuff = client.get(token) stuff = client.get(token)
if stuff is None: if stuff is None:
return None return None
else: else:
responseStr = stuff.decode("utf-8") responseStr = stuff.decode("utf-8")
print("response from redis : %s" % responseStr, file=sys.stderr) logger.debug("response from redis : %s" % responseStr)
combo = simplejson.loads(responseStr) combo = simplejson.loads(responseStr)
(host, port) = combo["host"].split(':') (host, port) = combo["host"].split(':')
print("host: %s, port: %s" % (host,port), file=sys.stderr) logger.debug("host: %s, port: %s" % (host,port))
return [host, port] return [host, port]
@ -228,5 +232,5 @@ class UnixDomainSocketDirectory(BasePlugin):
return [ 'unix_socket', uds_path ] return [ 'unix_socket', uds_path ]
except Exception as e: except Exception as e:
print("Error finding unix domain socket: %s" % str(e), file=sys.stderr) logger.error("Error finding unix domain socket: %s" % str(e))
return None return None

View File

@ -420,7 +420,8 @@ def websockify_init():
stderr_handler.setLevel(logging.DEBUG) stderr_handler.setLevel(logging.DEBUG)
log_formatter = logging.Formatter("%(message)s") log_formatter = logging.Formatter("%(message)s")
stderr_handler.setFormatter(log_formatter) stderr_handler.setFormatter(log_formatter)
logger.addHandler(stderr_handler) root = logging.getLogger()
root.addHandler(stderr_handler)
# Setup optparse. # Setup optparse.
usage = "\n %prog [options]" usage = "\n %prog [options]"
@ -552,7 +553,8 @@ def websockify_init():
log_file_handler = logging.FileHandler(opts.log_file) log_file_handler = logging.FileHandler(opts.log_file)
log_file_handler.setLevel(logging.DEBUG) log_file_handler.setLevel(logging.DEBUG)
log_file_handler.setFormatter(log_formatter) log_file_handler.setFormatter(log_formatter)
logger.addHandler(log_file_handler) root = logging.getLogger()
root.addHandler(log_file_handler)
del opts.log_file del opts.log_file
@ -585,7 +587,8 @@ def websockify_init():
legacy=opts.legacy_syslog) legacy=opts.legacy_syslog)
syslog_handler.setLevel(logging.DEBUG) syslog_handler.setLevel(logging.DEBUG)
syslog_handler.setFormatter(log_formatter) syslog_handler.setFormatter(log_formatter)
logger.addHandler(syslog_handler) root = logging.getLogger()
root.addHandler(syslog_handler)
del opts.syslog del opts.syslog
del opts.legacy_syslog del opts.legacy_syslog