From 7519e69a2c975778e46c2735a7936b6021e10cd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6tz?= Date: Fri, 12 Apr 2019 16:35:00 +0200 Subject: [PATCH] A lot of layout tweaks, Close #41 --- account_manager/models.py | 31 ++++++++++++++ account_manager/views/group_views.py | 4 +- templates/group/group_detail.jinja2 | 19 ++++----- templates/macros/utils_macros.jinja2 | 37 ++++++++++++++++- templates/realm/realm_detailed.jinja2 | 10 +++-- templates/realm/realm_groups.jinja2 | 3 +- templates/realm/realm_user.jinja2 | 40 ++++--------------- templates/user/realm_user_detail.jinja2 | 8 ++-- .../user/realm_user_update_groups.jinja2 | 4 +- 9 files changed, 97 insertions(+), 59 deletions(-) diff --git a/account_manager/models.py b/account_manager/models.py index 981adb7..9d224fb 100644 --- a/account_manager/models.py +++ b/account_manager/models.py @@ -6,6 +6,7 @@ from django.contrib.auth.tokens import default_token_generator from django.template.loader import render_to_string from django.utils.encoding import force_bytes from django.utils.http import urlsafe_base64_encode +from django.db.models import Q from ldapdb.models import fields as ldap_fields from ldapdb.models.base import Model @@ -14,6 +15,7 @@ from account_manager.utils.mail_utils import realm_send_mail from multiprocessing import Process from ldap import NO_SUCH_OBJECT, ALREADY_EXISTS from django.core.exceptions import ObjectDoesNotExist +from account_manager.utils.dbldap import get_filterstr class LdapUser(Model): @@ -73,6 +75,17 @@ class LdapUser(Model): LdapUser.base_dn = re.compile('(uid=[a-zA-Z0-9_]*),(.*)').match(ldap_user.dn).group(2) ldap_user.save() + @staticmethod + def get_users_by_dn(realm, users): + print(users) + LdapGroup.base_dn = f'ou=groups,{realm.ldap_base_dn}' + users = [re.compile('uid=([a-zA-Z0-9_]*),(ou=[a-zA-Z_]*),(.*)').match(user).group(1) for + user in users] + query = Q(username=users.pop()) + for user in users: + query = query | Q(username=user) + return LdapUser.objects.filter(query) + @staticmethod def is_user_duplicate(username): LdapUser.base_dn = LdapUser.ROOT_DN @@ -82,6 +95,24 @@ class LdapUser(Model): except (NO_SUCH_OBJECT, ObjectDoesNotExist) as err: return False + @staticmethod + def is_active_user(ldap_user): + try: + django_user = User.objects.get(username=ldap_user.username) + return django_user.last_login + except ObjectDoesNotExist: + return False + + @staticmethod + def get_user_active_marked(ldap_users): + user_wrappers = [] + for user in ldap_users: + if LdapUser.is_active_user(user): + user_wrappers.append({'user': user, 'active': True}) + else: + user_wrappers.append({'user': user, 'active': False}) + return user_wrappers + class LdapGroup(Model): """ diff --git a/account_manager/views/group_views.py b/account_manager/views/group_views.py index f9fd5f3..a47643b 100644 --- a/account_manager/views/group_views.py +++ b/account_manager/views/group_views.py @@ -38,7 +38,9 @@ def group_detail(request, realm_id, group_dn): realm = Realm.objects.get(id=realm_id) LdapGroup.base_dn = f'ou=groups,{realm.ldap_base_dn}' group = LdapGroup.objects.get(dn=group_dn) - return render(request, 'group/group_detail.jinja2', {'group': group, 'realm': realm}) + users = LdapUser.get_users_by_dn(realm, group.members) + user_wrapper = LdapUser.get_user_active_marked(users) + return render(request, 'group/group_detail.jinja2', {'group': group, 'realm': realm, 'users': user_wrapper}) @login_required diff --git a/templates/group/group_detail.jinja2 b/templates/group/group_detail.jinja2 index c299f85..60dd3d3 100644 --- a/templates/group/group_detail.jinja2 +++ b/templates/group/group_detail.jinja2 @@ -1,25 +1,20 @@ {% extends 'realm/realm_detailed.jinja2' %} {% import 'macros/form_macros.jinja2' as mform %} +{% import 'macros/utils_macros.jinja2' as mutils %} {% block detail_content %} {% if not form %} -

{{ group.name }}

+

Gruppe {{ group.name }}

Mitglieder

- + {{ mutils.get_user_table(realm, users) }}
- Update - Gruppe - Delete - Gruppe + + Gruppe bearbeiten + Gruppe löschen
{% else %}
diff --git a/templates/macros/utils_macros.jinja2 b/templates/macros/utils_macros.jinja2 index 4604167..856a68a 100644 --- a/templates/macros/utils_macros.jinja2 +++ b/templates/macros/utils_macros.jinja2 @@ -1,5 +1,3 @@ -{# author: Marius Hofmann #} - {% macro get_sidebar(realms, realm=None) -%} {#