>>107295856
class AuthenticationManager:
def __init__(self, timeToLive:int = 3600) -> None:
self._timeToLive = timeToLive
self._tokens = {}
self._expiries = {}
def generate(self, tokenId:str, currentTime:int):
if tokenId not in self._tokens:
new_expiryTime = self._timeToLive + currentTime
self._expiries.setdefault(new_expiryTime, set()).add(tokenId)
self._tokens[tokenId] = new_expiryTime
print(tokenId, "added to db, expires", new_expiryTime)
else:
print(tokenId, "already in db, expires at", self._tokens[tokenId])
def renew(self, tokenId:str, currentTime:int):
if tokenId in self._tokens:
old_expiryTime = self._tokens[tokenId]
if old_expiryTime < currentTime:
print(tokenId, 'expired')
return
new_expiryTime = self._timeToLive + currentTime
self._expiries[old_expiryTime].discard(tokenId)
self._expiries.setdefault(new_expiryTime, set()).add(tokenId)
self._tokens[tokenId] = new_expiryTime
print(tokenId, "renewed, expires", new_expiryTime)
else:
print(tokenId, "not in db")
def countUnexpiredTokens(self, currentTime:int):
return sum([len(v) for k, v in self._expiries.items() if k >= currentTime])