diff --git a/proxstar/__init__.py b/proxstar/__init__.py index a6c3ae6..34b9cf0 100644 --- a/proxstar/__init__.py +++ b/proxstar/__init__.py @@ -44,6 +44,7 @@ from proxstar.vnc import ( ) from proxstar.auth import get_auth from proxstar.util import gen_password +from proxstar.ldapdb import connect_ldap from proxstar.starrs import check_hostname, renew_ip from proxstar.proxmox import connect_proxmox, get_isos, get_pools, get_ignored_pools @@ -82,6 +83,7 @@ engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI']) Base.metadata.bind = engine DBSession = sessionmaker(bind=engine) db = DBSession() +ldap_conn = connect_ldap() starrs = psycopg2.connect( "dbname='{}' user='{}' host='{}' password='{}'".format( diff --git a/proxstar/ldapdb.py b/proxstar/ldapdb.py index c737310..a0135fa 100644 --- a/proxstar/ldapdb.py +++ b/proxstar/ldapdb.py @@ -1,7 +1,8 @@ +from functools import lru_cache from csh_ldap import CSHLDAP from flask import current_app as app -from proxstar import logging +from proxstar import logging, ldap_conn def connect_ldap(): @@ -13,28 +14,28 @@ def connect_ldap(): return ldap +@lru_cache(maxsize=32) def is_rtp(user): - ldap = connect_ldap() - rtp_group = ldap.get_group('rtp') - return rtp_group.check_member(ldap.get_member(user, uid=True)) + rtp_group = ldap_conn.get_group('rtp') + return rtp_group.check_member(ldap_conn.get_member(user, uid=True)) +@lru_cache(maxsize=32) def is_active(user): - ldap = connect_ldap() - active_group = ldap.get_group('active') - return active_group.check_member(ldap.get_member(user, uid=True)) + active_group = ldap_conn.get_group('active') + return active_group.check_member(ldap_conn.get_member(user, uid=True)) +@lru_cache(maxsize=32) def is_current_student(user): - ldap = connect_ldap() - current_student_group = ldap.get_group('current_student') - return current_student_group.check_member(ldap.get_member(user, uid=True)) + current_student_group = ldap_conn.get_group('current_student') + return current_student_group.check_member(ldap_conn.get_member(user, uid=True)) +@lru_cache(maxsize=32) def is_user(user): - ldap = connect_ldap() try: - ldap.get_member(user, uid=True) + ldap_conn.get_member(user, uid=True) return True except: return False diff --git a/requirements.txt b/requirements.txt index e198613..da58a4b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ black~=20.8b1 -csh-ldap~=2.2.0 +csh-ldap~=2.3.0 flask==1.0.2 flask-pyoidc==1.3.0 gunicorn==19.9.0