diff --git a/config.json b/config.json index ed8458c8e8397ed9b742284db3e559288d08f8fa..e04452f71ea89698547493df0b6c8d72a87b9f06 100644 --- a/config.json +++ b/config.json @@ -3,5 +3,6 @@ "bind_password": "thisisthebindpassword", "api_baseurl": "http://localhost:5000/api/v1", "api_key": "secretapikey", - "listen_addr": "127.0.0.1:3389" + "listen_addr": "127.0.0.1:3389", + "cache_ttl": 60 } diff --git a/requirements.txt b/requirements.txt index 0091a34a7af56770bf5967c406be0d9d3a3e36f2..b636ab0156383ac8a5b81f7180d803d0e6b9849e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,4 @@ --extra-index-url https://git.cccv.de/api/v4/projects/220/packages/pypi/simple ldapserver==0.0.1.dev3 + +CacheControl diff --git a/server.py b/server.py index 6a53bf5ce3d8107437c28338dc4a5283da409251..99257bc06eecda314615f2049ca6cfde8b362820 100644 --- a/server.py +++ b/server.py @@ -2,6 +2,8 @@ import sys import json import socketserver import requests +from cachecontrol import CacheControl +from cachecontrol.heuristics import ExpiresAfter from ldapserver import SimpleLDAPRequestHandler from ldapserver.dn import DN, RDN @@ -12,10 +14,10 @@ from ldapserver.exceptions import LDAPInvalidCredentials from ldapserver.schema import RFC2307BIS_SUBSCHEMA class UffdAPI: - def __init__(self, baseurl, key): + def __init__(self, baseurl, key, cache_ttl=60): self.baseurl = baseurl self.key = key - self.session = requests.Session() + self.session = CacheControl(requests.Session(), heuristic=ExpiresAfter(seconds=cache_ttl)) self.session.headers['Authorization'] = 'Bearer '+self.key def get(self, endpoint, **kwargs): @@ -191,7 +193,7 @@ class RequestHandler(SimpleLDAPRequestHandler): def main(config): dn_base = DN(config['dn_base']) - api = UffdAPI(config['api_baseurl'], config['api_key']) + api = UffdAPI(config['api_baseurl'], config['api_key'], config.get('cache_ttl', 60)) user_directory = UserDirectory(api, dn_base) group_directory = GroupDirectory(api, dn_base)