authorization: replace PeriodicCallback

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
Eric Callahan 2021-12-09 06:26:58 -05:00
parent 69a06dd12a
commit 4e625aef37

View File

@ -18,7 +18,6 @@ import re
import socket import socket
import logging import logging
import json import json
from tornado.ioloop import PeriodicCallback
from tornado.web import HTTPError from tornado.web import HTTPError
from libnacl.sign import Signer, Verifier from libnacl.sign import Signer, Verifier
@ -57,7 +56,7 @@ def base64url_decode(data: str) -> bytes:
ONESHOT_TIMEOUT = 5 ONESHOT_TIMEOUT = 5
TRUSTED_CONNECTION_TIMEOUT = 3600 TRUSTED_CONNECTION_TIMEOUT = 3600
PRUNE_CHECK_TIME = 300 * 1000 PRUNE_CHECK_TIME = 300.
HASH_ITER = 100000 HASH_ITER = 100000
API_USER = "_API_KEY_USER_" API_USER = "_API_KEY_USER_"
@ -184,9 +183,10 @@ class Authorization:
f"Trusted Clients:\n{t_clients}\n" f"Trusted Clients:\n{t_clients}\n"
f"CORS Domains:\n{c_domains}") f"CORS Domains:\n{c_domains}")
self.prune_handler = PeriodicCallback( eventloop = self.server.get_event_loop()
self._prune_conn_handler, PRUNE_CHECK_TIME) self.prune_timer = eventloop.register_timer(
self.prune_handler.start() self._prune_conn_handler)
self.prune_timer.start(delay=PRUNE_CHECK_TIME)
# Register Authorization Endpoints # Register Authorization Endpoints
self.permitted_paths.add("/server/redirect") self.permitted_paths.add("/server/redirect")
@ -516,7 +516,7 @@ class Authorization:
key = base64url_decode(jwk['x']) key = base64url_decode(jwk['x'])
return Verifier(key.hex().encode()) return Verifier(key.hex().encode())
def _prune_conn_handler(self) -> None: def _prune_conn_handler(self, eventtime: float) -> float:
cur_time = time.time() cur_time = time.time()
for ip, user_info in list(self.trusted_users.items()): for ip, user_info in list(self.trusted_users.items()):
exp_time: float = user_info['expires_at'] exp_time: float = user_info['expires_at']
@ -524,6 +524,7 @@ class Authorization:
self.trusted_users.pop(ip, None) self.trusted_users.pop(ip, None)
logging.info( logging.info(
f"Trusted Connection Expired, IP: {ip}") f"Trusted Connection Expired, IP: {ip}")
return eventtime + PRUNE_CHECK_TIME
def _oneshot_token_expire_handler(self, token): def _oneshot_token_expire_handler(self, token):
self.oneshot_tokens.pop(token, None) self.oneshot_tokens.pop(token, None)
@ -709,7 +710,7 @@ class Authorization:
"X-Api-Key") "X-Api-Key")
def close(self) -> None: def close(self) -> None:
self.prune_handler.stop() self.prune_timer.stop()
def load_component(config: ConfigHelper) -> Authorization: def load_component(config: ConfigHelper) -> Authorization: