From 026bc0dcbed79a12b28139dab7e9a7004dc57fbb Mon Sep 17 00:00:00 2001
From: nd <git@notandy.de>
Date: Sun, 12 Jul 2020 11:49:43 +0200
Subject: [PATCH] moved to generic ldap connection instead of service/user
 connection

---
 uffd/group/models.py  |  2 +-
 uffd/group/views.py   |  6 +++---
 uffd/ldap/__init__.py |  2 +-
 uffd/ldap/ldap.py     |  5 ++++-
 uffd/user/models.py   |  4 ++--
 uffd/user/views.py    | 10 +++++-----
 6 files changed, 16 insertions(+), 13 deletions(-)

diff --git a/uffd/group/models.py b/uffd/group/models.py
index 98b60453..5006c097 100644
--- a/uffd/group/models.py
+++ b/uffd/group/models.py
@@ -25,7 +25,7 @@ class Group():
 
 	@classmethod
 	def from_ldap_dn(cls, dn):
-		conn = ldap.service_conn()
+		conn = ldap.get_conn()
 		conn.search(dn, '(objectClass=groupOfUniqueNames)')
 		if not len(conn.entries) == 1:
 			return None
diff --git a/uffd/group/views.py b/uffd/group/views.py
index 35ad425d..1c6bcf2e 100644
--- a/uffd/group/views.py
+++ b/uffd/group/views.py
@@ -1,7 +1,7 @@
 from flask import Blueprint, current_app, render_template
 
 from uffd.navbar import register_navbar
-from uffd.ldap import service_conn, escape_filter_chars
+from uffd.ldap import get_conn, escape_filter_chars
 
 from .models import Group
 
@@ -10,7 +10,7 @@ bp = Blueprint("group", __name__, template_folder='templates', url_prefix='/grou
 @bp.route("/")
 @register_navbar('Groups', icon='layer-group', blueprint=bp)
 def group_list():
-	conn = service_conn()
+	conn = get_conn()
 	conn.search(current_app.config["LDAP_BASE_GROUPS"], '(objectclass=groupOfUniqueNames)')
 	groups = []
 	for i in conn.entries:
@@ -19,7 +19,7 @@ def group_list():
 
 @bp.route("/<int:gid>")
 def group_show(gid):
-	conn = service_conn()
+	conn = get_conn()
 	conn.search(current_app.config["LDAP_BASE_GROUPS"], '(&(objectclass=groupOfUniqueNames)(gidNumber={}))'.format((escape_filter_chars(gid))))
 	assert len(conn.entries) == 1
 	group = Group.from_ldap(conn.entries[0])
diff --git a/uffd/ldap/__init__.py b/uffd/ldap/__init__.py
index 61ffb9e0..b57cd784 100644
--- a/uffd/ldap/__init__.py
+++ b/uffd/ldap/__init__.py
@@ -1,4 +1,4 @@
 from .ldap import bp as ldap_bp
-from .ldap import service_conn, user_conn, escape_filter_chars, uid_to_dn, loginname_to_dn, get_next_uid
+from .ldap import get_conn, escape_filter_chars, uid_to_dn, loginname_to_dn, get_next_uid
 
 bp = [ldap_bp]
diff --git a/uffd/ldap/ldap.py b/uffd/ldap/ldap.py
index a9068cc7..760ae092 100644
--- a/uffd/ldap/ldap.py
+++ b/uffd/ldap/ldap.py
@@ -16,11 +16,14 @@ def fix_connection(conn):
 def service_conn():
 	server = Server(current_app.config["LDAP_SERVICE_URL"], get_info=ALL)
 	conn = Connection(server, current_app.config["LDAP_SERVICE_BIND_DN"], current_app.config["LDAP_SERVICE_BIND_PASSWORD"], auto_bind=True)
-	return fix_connection(conn)
 
 def user_conn():
 	pass
 
+def get_conn():
+	conn = service_conn()
+	return fix_connection(conn)
+
 def uid_to_dn(uid):
 	conn = service_conn()
 	conn.search(current_app.config["LDAP_BASE_USER"], '(&(objectclass=person)(uidNumber={}))'.format(escape_filter_chars(uid)))
diff --git a/uffd/user/models.py b/uffd/user/models.py
index 8d889a1f..d4d3fb39 100644
--- a/uffd/user/models.py
+++ b/uffd/user/models.py
@@ -35,14 +35,14 @@ class User():
 
 	@classmethod
 	def from_ldap_dn(cls, dn):
-		conn = ldap.service_conn()
+		conn = ldap.get_conn()
 		conn.search(dn, '(objectClass=person)')
 		if not len(conn.entries) == 1:
 			return None
 		return User.from_ldap(conn.entries[0])
 
 	def to_ldap(self, new):
-		conn = ldap.service_conn()
+		conn = ldap.get_conn()
 		if new:
 			attributes= {
 				'uidNumber': ldap.get_next_uid(),
diff --git a/uffd/user/views.py b/uffd/user/views.py
index b6633bbb..31ef6989 100644
--- a/uffd/user/views.py
+++ b/uffd/user/views.py
@@ -4,14 +4,14 @@ from uffd.navbar import register_navbar
 from uffd.csrf import csrf_protect
 
 from .models import User
-from uffd.ldap import service_conn, escape_filter_chars
+from uffd.ldap import get_conn, escape_filter_chars
 
 bp = Blueprint("user", __name__, template_folder='templates', url_prefix='/user/')
 
 @bp.route("/")
 @register_navbar('Users', icon='users', blueprint=bp)
 def user_list():
-	conn = service_conn()
+	conn = get_conn()
 	conn.search(current_app.config["LDAP_BASE_USER"], '(objectclass=person)')
 	users = []
 	for i in conn.entries:
@@ -25,7 +25,7 @@ def user_show(uid=None):
 		user = User()
 		ldif = '<none yet>'
 	else:
-		conn = service_conn()
+		conn = get_conn()
 		conn.search(current_app.config["LDAP_BASE_USER"], '(&(objectclass=person)(uidNumber={}))'.format((escape_filter_chars(uid))))
 		assert len(conn.entries) == 1
 		user = User.from_ldap(conn.entries[0])
@@ -35,7 +35,7 @@ def user_show(uid=None):
 @bp.route("/<int:uid>/update", methods=['POST'])
 @bp.route("/new", methods=['POST'])
 def user_update(uid=False):
-	conn = service_conn()
+	conn = get_conn()
 	if uid:
 		conn.search(current_app.config["LDAP_BASE_USER"], '(&(objectclass=person)(uidNumber={}))'.format((escape_filter_chars(uid))))
 		assert len(conn.entries) == 1
@@ -62,7 +62,7 @@ def user_update(uid=False):
 @csrf_protect
 @bp.route("/<int:uid>/del")
 def user_delete(uid):
-	conn = service_conn()
+	conn = get_conn()
 	conn.search(current_app.config["LDAP_BASE_USER"], '(&(objectclass=person)(uidNumber={}))'.format((escape_filter_chars(uid))))
 	assert len(conn.entries) == 1
 	if conn.delete(conn.entries[0].entry_dn):
-- 
GitLab