summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2021-02-08 10:42:01 +0100
committerPierre Ossman <ossman@cendio.se>2021-02-08 10:42:01 +0100
commitf7b086747142af77c3bb9ab7ace6f71240dbe816 (patch)
treef599806c081cd2e5ad44089cb616d4d4257bb7ce
parent4afafcd15241167eecae82796fca9dc65efefef4 (diff)
parent9dab8b360b293e61cde53797071f29006c11078b (diff)
downloadwebsockify-f7b086747142af77c3bb9ab7ace6f71240dbe816.tar.gz
Merge branch 'fix467_redis' of https://github.com/PexMor/websockify
-rw-r--r--websockify/token_plugins.py45
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):