summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2017-12-05 20:13:59 +0200
committerLars Wirzenius <liw@liw.fi>2017-12-05 20:13:59 +0200
commitc408cc749a94595771d0239dd3c3a687aff273f9 (patch)
tree7fc13f1ce22893a39a225e27e709eed3a8aebb5f
parentabd1e9e0a9ab32a7d4fc9dce82d6ce92cb63a11d (diff)
downloadapifw-c408cc749a94595771d0239dd3c3a687aff273f9.tar.gz
Add: cache token parsing
-rw-r--r--apifw/token.py28
1 files changed, 24 insertions, 4 deletions
diff --git a/apifw/token.py b/apifw/token.py
index d1e503c..a9a12ac 100644
--- a/apifw/token.py
+++ b/apifw/token.py
@@ -20,6 +20,29 @@ import jwt
JWT_SIGNING_ALGORITHM = 'RS512'
+class TokenCache:
+
+ def __init__(self):
+ self._cache = {}
+
+ def parse(self, token, key, audience):
+ if token not in self._cache:
+ if len(self._cache) > 1024: # pragma: no cover
+ self._cache = {}
+ decoded = self._decode(token, key, audience)
+ self._cache[token] = decoded
+ return self._cache[token]
+
+ def _decode(self, token, key, audience):
+ return jwt.decode(
+ token,
+ key=key.exportKey('OpenSSH'),
+ audience=None, options={'verify_aud': False})
+
+
+_cache = TokenCache()
+
+
def create_token(claims, signing_key):
return jwt.encode(
claims,
@@ -28,7 +51,4 @@ def create_token(claims, signing_key):
def decode_token(token, key, audience):
- return jwt.decode(
- token,
- key=key.exportKey('OpenSSH'),
- audience=None, options={'verify_aud': False})
+ return _cache.parse(token, key, audience)