diff --git a/account_manager/main_views.py b/account_manager/main_views.py index 0175979..08cf2d1 100644 --- a/account_manager/main_views.py +++ b/account_manager/main_views.py @@ -34,22 +34,38 @@ def is_realm_admin(view_func): @login_required def realm_list(request): user = request.user - if not user.is_superuser: - realms = Realm.objects.filter(admin_group__user__username__contains=user.username).order_by('name') - if len(realms) == 0: - try: - user = LdapUser.objects.get(username=user.username) - realm_base_dn = re.compile('(uid=[a-zA-Z0-9_]*),(ou=[a-zA-Z_]*),(.*)').match(user.dn).group(3) - realm = Realm.objects.get(ldap_base_dn=realm_base_dn) - return redirect('realm-user-detail', realm.id, user.dn) - except ObjectDoesNotExist as err: - logger.info('Anmeldung fehlgeschlagen', err) - return HttpResponse("Invalid login. Please try again.") - elif len(realms) == 1: - return redirect('realm-detail', realms[0].id) - else: - return render(request, 'realm/realm_home.jinja2', {'realms': realms}) + if user.is_superuser: + realms = Realm.objects.all() else: + realms = Realm.objects.filter(admin_group__user__username__contains=user.username).order_by('name') + + if len(realms) == 0 and not user.is_superuser: + try: + user = LdapUser.objects.get(username=user.username) + realm_base_dn = re.compile('(uid=[a-zA-Z0-9_]*),(ou=[a-zA-Z_]*),(.*)').match(user.dn).group(3) + realm = Realm.objects.get(ldap_base_dn=realm_base_dn) + return redirect('realm-user-detail', realm.id, user.dn) + except ObjectDoesNotExist as err: + logger.info('Anmeldung fehlgeschlagen', err) + return HttpResponse("Invalid login. Please try again.") + elif len(realms) == 1: + return redirect('realm-detail', realms[0].id) + else: + realm_wrappers = [] + for realm in realms: + realm_wrappers.append(_get_group_user_count_wrapper(realm)) + return render(request, 'realm/realm_home.jinja2', {'realms': realms, 'realm_wrappers': realm_wrappers}) + + +def _get_group_user_count_wrapper(realm): + LdapUser.base_dn = f'ou=people,{realm.ldap_base_dn}' + LdapGroup.base_dn = f'ou=groups,{realm.ldap_base_dn}' + return {'realm': realm, 'group_count': LdapGroup.objects.count(), 'user_count': LdapUser.objects.count()} + + +@login_required +def realm_add(request): + if request.user.is_superuser: realms = Realm.objects.all().order_by('name') if request.method == 'POST': form = RealmAddForm(request.POST) @@ -70,7 +86,9 @@ def realm_list(request): {'realm_name': name}) else: form = RealmAddForm() - return render(request, 'realm/realm_home.jinja2', {'realms': realms, 'form': form}) + return render(request, 'realm/realm_add.jinja2', {'realms': realms, 'form': form}) + else: + redirect('permission-denied') def base_dn_available(base_dn): diff --git a/account_manager/urls.py b/account_manager/urls.py index 90871d4..1d9f7bb 100644 --- a/account_manager/urls.py +++ b/account_manager/urls.py @@ -7,6 +7,7 @@ from . import main_views urlpatterns = [ # Realm path('', main_views.realm_list, name='realm-home'), + path('realm/add/', main_views.realm_add, name='realm-add'), path('realm//', main_views.realm_detail, name='realm-detail'), path('realm//update/', main_views.realm_update, name='realm-update'), path('realm//delete/confirm/', main_views.realm_delete_confirm, name='realm-delete-confirm'), diff --git a/templates/base_admin.jinja2 b/templates/base_admin.jinja2 index fae146a..b8b7b35 100644 --- a/templates/base_admin.jinja2 +++ b/templates/base_admin.jinja2 @@ -29,6 +29,12 @@ {% endif %} {% endif %} + {% if request.user.is_superuser %} +
+ + Bereich hinufügen + {% endif %}
diff --git a/templates/macros/utils_macros.jinja2 b/templates/macros/utils_macros.jinja2 index 856a68a..8cd4bfd 100644 --- a/templates/macros/utils_macros.jinja2 +++ b/templates/macros/utils_macros.jinja2 @@ -55,3 +55,55 @@ {% endmacro %} +{% macro get_realm_table(realms) -%} +
+ + +
+ + + + + + + + + + + + + + {% for realm_wrapper in realms %} + + + + + + + + + {# #} + + {% endfor %} + +
BereichsnameLdap Basis DNMailadresseAdmingruppeDefaultgruppeNutzer anzahlGruppen anzahl
+ {{ realm_wrapper.realm.name }} + {{ realm_wrapper.realm.ldap_base_dn }}{{ realm_wrapper.realm.email }} + {% if realm_wrapper.realm.admin_group %} + {{ realm_wrapper.realm.admin_group }} + {% else %} + + {% endif %} + + {% if realm_wrapper.realm.default_group %} + {{ realm_wrapper.realm.default_group }} + {% else %} + + {% endif %} + {{ realm_wrapper.user_count }}{{ realm_wrapper.group_count }}{% if user.active %}#} + {# {% else %}#} + {# {% endif %}
+{% endmacro %} + diff --git a/templates/realm/realm_add.jinja2 b/templates/realm/realm_add.jinja2 new file mode 100644 index 0000000..7cd1880 --- /dev/null +++ b/templates/realm/realm_add.jinja2 @@ -0,0 +1,19 @@ +{% extends 'base_admin.jinja2' %} +{% import 'macros/form_macros.jinja2' as mform %} +{% import 'macros/utils_macros.jinja2' as mutils %} + +{% block admin_content %} +
+
+ {% if request.user.is_superuser %} +

Neuen Bereich anlegen

+
+ + {{ mform.text_input(form.name) }} + {{ mform.text_input(form.ldap_base_dn) }} + +
+ {% endif %} +
+
+{% endblock %} diff --git a/templates/realm/realm_home.jinja2 b/templates/realm/realm_home.jinja2 index 7cd1880..15fbf7e 100644 --- a/templates/realm/realm_home.jinja2 +++ b/templates/realm/realm_home.jinja2 @@ -3,17 +3,14 @@ {% import 'macros/utils_macros.jinja2' as mutils %} {% block admin_content %} -
-
- {% if request.user.is_superuser %} -

Neuen Bereich anlegen

-
- - {{ mform.text_input(form.name) }} - {{ mform.text_input(form.ldap_base_dn) }} - -
- {% endif %} +

Bereiche

+ {{ mutils.get_realm_table(realm_wrappers) }} + {% if request.user.is_superuser %} + -
+ {% endif %} + {% endblock %}