diff options
author | Pierre Ossman <ossman@cendio.se> | 2021-02-08 10:42:01 +0100 |
---|---|---|
committer | Pierre Ossman <ossman@cendio.se> | 2021-02-08 10:42:01 +0100 |
commit | f7b086747142af77c3bb9ab7ace6f71240dbe816 (patch) | |
tree | f599806c081cd2e5ad44089cb616d4d4257bb7ce | |
parent | 4afafcd15241167eecae82796fca9dc65efefef4 (diff) | |
parent | 9dab8b360b293e61cde53797071f29006c11078b (diff) | |
download | websockify-f7b086747142af77c3bb9ab7ace6f71240dbe816.tar.gz |
Merge branch 'fix467_redis' of https://github.com/PexMor/websockify
-rw-r--r-- | websockify/token_plugins.py | 45 |
1 files changed, 38 insertions, 7 deletions
diff --git a/websockify/token_plugins.py b/websockify/token_plugins.py index dab1982..3b3e3e8 100644 --- a/websockify/token_plugins.py +++ b/websockify/token_plugins.py @@ -150,26 +150,57 @@ class JWTTokenApi(BasePlugin): return None class TokenRedis(): + """ + The TokenRedis plugin expects the format of the data in a form of json. + + Prepare data with: + redis-cli set hello '{"host":"127.0.0.1:5000"}' + + Verify with: + redis-cli --raw get hello + + Spawn a test "server" using netcat + nc -l 5000 -v + + Note: you have to install also the 'redis' and 'simplejson' modules + pip install redis simplejson + """ def __init__(self, src): - self._server, self._port = src.split(":") + try: + # import those ahead of time so we provide error earlier + import redis + import simplejson + self._server, self._port = src.split(":") + print("TokenRedis backend initilized (%s:%s)" % + (self._server, self._port), file=sys.stderr) + except ValueError: + print("The provided --token-source='%s' is not in an expected format <host>:<port>" % + src, file=sys.stderr) + sys.exit() + except ImportError: + print("package redis or simplejson not found, are you sure you've installed them correctly?", file=sys.stderr) + sys.exit() def lookup(self, token): try: import redis import simplejson - except ImportError as e: + except ImportError: print("package redis or simplejson not found, are you sure you've installed them correctly?", file=sys.stderr) - return None + sys.exit() - client = redis.Redis(host=self._server,port=self._port) + print("resolving token '%s'" % token, file=sys.stderr) + client = redis.Redis(host=self._server, port=self._port) stuff = client.get(token) if stuff is None: return None else: - combo = simplejson.loads(stuff.decode("utf-8")) + responseStr = stuff.decode("utf-8") + print("response from redis : %s" % responseStr, file=sys.stderr) + combo = simplejson.loads(responseStr) (host, port) = combo["host"].split(':') - port = port.encode('ascii','ignore') - return [ host, port ] + print("host: %s, port: %s" % (host,port), file=sys.stderr) + return [host, port] class UnixDomainSocketDirectory(BasePlugin): |