diff --git a/webapp/config.py.dist b/webapp/config.py.dist index 00af663..c0f8035 100644 --- a/webapp/config.py.dist +++ b/webapp/config.py.dist @@ -8,6 +8,7 @@ dn_format = "uid=%s,ou=people,dc=hackerspace,dc=pl" ldapweb_admin_group = 'cn=ldap-admin,ou=Group,dc=hackerspace,dc=pl' +ldap_base = 'dc=hackerspace,dc=pl' ldap_people = 'ou=People,dc=hackerspace,dc=pl' admin_groups = { 'Fatty': 'cn=fatty,ou=Group,dc=hackerspace,dc=pl', diff --git a/webapp/templates/admin/user.html b/webapp/templates/admin/user.html index 1b588d6..14a8eba 100644 --- a/webapp/templates/admin/user.html +++ b/webapp/templates/admin/user.html @@ -2,9 +2,18 @@ {% block content %}

User: {{ uid }}

-Back +
+ Back -View user in Kasownik + View user in Kasownik +
+ +

+ Belongs to groups: + {% for group_name in groups %} + {{ group_name }}, + {% endfor %} +

Full LDAP record:

diff --git a/webapp/views.py b/webapp/views.py index 5a840c1..253cace 100644 --- a/webapp/views.py +++ b/webapp/views.py @@ -268,6 +268,15 @@ def rendered_ldap_profile(profile): rendered_profile.sort(key=lambda x: x[1] is None) return rendered_profile +def ldap_get_user_groups(conn, uid): + groups = [] + user_dn = config.dn_format % uid + filter = f'(&(objectClass=groupOfUniqueNames)(uniqueMember={user_dn}))' + for group_dn, attrs in conn.search_s(config.ldap_base, ldap.SCOPE_SUBTREE, filter): + groups.append(attrs['cn'][0].decode()) + + return groups + def ldap_validate_uid(uid): if not re.match(r'^[a-z-_][a-z0-9-_]*\Z', uid, flags=re.I): raise RuntimeError('Invalid uid') @@ -282,5 +291,6 @@ def admin_user_view(uid): ldap_validate_uid(uid) profile = ldap_get_user(conn, uid) + groups = ldap_get_user_groups(conn, uid) - return flask.render_template('admin/user.html', uid=uid, profile=rendered_ldap_profile(profile)) + return flask.render_template('admin/user.html', uid=uid, profile=rendered_ldap_profile(profile), groups=groups)