forked from jpadilla/pyjwt
/
jwk_set_cache.py
29 lines (21 loc) · 913 Bytes
/
jwk_set_cache.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from typing import Optional
from datetime import datetime, timezone
from .api_jwk import PyJWKSet, PyJWTSetWithTimestamp
class JWKSetCache:
def __init__(self, lifespan: int):
self.jwk_set_with_timestamp = None
self.lifespan = lifespan
def put(self, jwk_set: PyJWKSet):
if jwk_set is not None:
self.jwk_set_with_timestamp = PyJWTSetWithTimestamp(jwk_set)
else:
# clear cache
self.jwk_set_with_timestamp = None
def get(self) -> Optional:
if self.jwk_set_with_timestamp is None or self.is_expired():
return None
return self.jwk_set_with_timestamp.get_jwk_set()
def is_expired(self) -> bool:
return self.jwk_set_with_timestamp is not None \
and self.lifespan > -1 \
and datetime.now(timezone.utc) > self.jwk_set_with_timestamp.get_timestamp() + self.lifespan