diff --git a/account_helper/models.py b/account_helper/models.py index 19b906f..93beed0 100644 --- a/account_helper/models.py +++ b/account_helper/models.py @@ -6,7 +6,8 @@ from django.db import models class Realm(models.Model): name = models.CharField(max_length=200, unique=True) email = models.CharField(max_length=200) - admin_group = models.ForeignKey(Group, models.PROTECT, blank=True, null=True) + admin_group = models.ForeignKey(Group, models.PROTECT, blank=True, null=True, related_name='admin_groups') + default_group = models.ForeignKey(Group, models.PROTECT, blank=True, null=True, related_name='default_groups') ldap_base_dn = models.CharField(max_length=400, unique=True) def __str__(self): diff --git a/account_manager/forms.py b/account_manager/forms.py index 3306f5a..fc20834 100644 --- a/account_manager/forms.py +++ b/account_manager/forms.py @@ -6,7 +6,7 @@ from django.forms import modelformset_factory class AddLDAPUserForm(forms.Form): username = forms.CharField(label='Nutzername', max_length=400) - email = forms.EmailField(label='E-Mail', required=False) + email = forms.EmailField(label='E-Mail') class AdminUpdateLDAPUserForm(forms.Form): @@ -58,7 +58,10 @@ class RealmUpdateForm(forms.Form): name = forms.CharField(label='Bereichsname', max_length=200) admin_group = forms.ModelChoiceField(label='Admin Gruppe', help_text="Die Mitglieder dieser Gruppe darf den Bereich administieren", - queryset=LdapGroup.objects.all()) + queryset=LdapGroup.objects.all(), required=False) + default_group = forms.ModelChoiceField(label='Default Gruppe', + help_text="Diese Gruppe wird jedem User der neu erstellt wird hinzugefügt werden", + queryset=LdapGroup.objects.all(), required=False) UserFormset = modelformset_factory( diff --git a/account_manager/main_views.py b/account_manager/main_views.py index 22d6023..c26e4a1 100644 --- a/account_manager/main_views.py +++ b/account_manager/main_views.py @@ -73,26 +73,44 @@ def realm_detail(request, realm_id): @is_realm_admin def realm_update(request, realm_id): if request.user.is_superuser: - realm_obj = Realm.objects.get(id=realm_id) - data = {'id': realm_obj.id, 'ldap_base_dn': realm_obj.ldap_base_dn, 'name': realm_obj.name, - 'email': realm_obj.email, - 'admin_group': realm_obj.admin_group} + realm = Realm.objects.get(id=realm_id) + LdapGroup.base_dn = f'ou=groups,{realm.ldap_base_dn}' + ldap_admin_group = None + if realm.admin_group: + ldap_admin_group = LdapGroup.objects.get(name=realm.admin_group.name) + ldap_default_group = None + if realm.default_group: + ldap_default_group = LdapGroup.objects.get(name=realm.default_group.name) + data = {'id': realm.id, + 'ldap_base_dn': realm.ldap_base_dn, + 'name': realm.name, + 'email': realm.email, + 'admin_group': ldap_admin_group, + 'default_group': ldap_default_group} if request.method == 'POST': form = RealmUpdateForm(request.POST) if form.is_valid(): - realm_obj.name = form.cleaned_data['name'] - realm_obj.ldap_base_dn = form.cleaned_data['ldap_base_dn'] - realm_obj.email = form.cleaned_data['email'] + realm.name = form.cleaned_data['name'] + realm.ldap_base_dn = form.cleaned_data['ldap_base_dn'] + realm.email = form.cleaned_data['email'] admin_ldap_group = form.cleaned_data['admin_group'] - realm_obj.admin_group, _ = Group.objects.get_or_create(name=admin_ldap_group.name) - realm_obj.save() - return redirect('realm-detail', realm_obj.id) + if admin_ldap_group: + realm.admin_group, _ = Group.objects.get_or_create(name=admin_ldap_group.name) + else: + realm.admin_group = None + default_ldap_group = form.cleaned_data['default_group'] + if default_ldap_group: + realm.default_group, _ = Group.objects.get_or_create(name=default_ldap_group.name) + else: + realm.default_group = None + realm.save() + return redirect('realm-detail', realm.id) else: form = RealmUpdateForm(initial=data) - return render(request, 'realm/realm_update.jinja2', {'realm': realm_obj, 'form': form}) + return render(request, 'realm/realm_update.jinja2', {'realm': realm, 'form': form}) else: - realm_obj = Realm.objects.get(id=realm_id) - return render(request, 'realm/realm_update.jinja2', {'realm': realm_obj}) + realm = Realm.objects.get(id=realm_id) + return render(request, 'realm/realm_update.jinja2', {'realm': realm}) def realm_delete(request, realm_id): diff --git a/account_manager/views/user_views.py b/account_manager/views/user_views.py index 04c5713..36f8932 100644 --- a/account_manager/views/user_views.py +++ b/account_manager/views/user_views.py @@ -39,7 +39,7 @@ def realm_user_detail(request, realm_id, user_dn): @login_required @is_realm_admin def user_add(request, realm_id): - realm_obj = Realm.objects.get(id=realm_id) + realm = Realm.objects.get(id=realm_id) # if this is a POST request we need to process the form data if request.method == 'POST': # create a form instance and populate it with data from the request: @@ -52,18 +52,22 @@ def user_add(request, realm_id): protocol = 'http' if request.is_secure(): protocol = 'https' - LdapUser.base_dn = f'ou=people,{realm_obj.ldap_base_dn}' - LdapUser.create_with_django_user_creation_and_welcome_mail(realm=realm_obj, + LdapUser.base_dn = f'ou=people,{realm.ldap_base_dn}' + LdapUser.create_with_django_user_creation_and_welcome_mail(realm=realm, protocol=protocol, domain=current_site.domain, username=username, email=email) + user = LdapUser.objects.get(username=username) + LdapGroup.base_dn = f'ou=groups,{realm.ldap_base_dn}' + default_ldap_group = LdapGroup.objects.get(name=realm.default_group.name) + ldap_add_user_to_groups(ldap_user=user.dn, user_groups=[default_ldap_group, ]) return redirect('realm-user-list', realm_id) # if a GET (or any other method) we'll create a blank form else: form = AddLDAPUserForm() - return render(request, 'user/realm_user_add.jinja2', {'form': form, 'realm': realm_obj}) + return render(request, 'user/realm_user_add.jinja2', {'form': form, 'realm': realm}) @login_required diff --git a/templates/macros/form_macros.jinja2 b/templates/macros/form_macros.jinja2 index b573c8f..1e80f61 100644 --- a/templates/macros/form_macros.jinja2 +++ b/templates/macros/form_macros.jinja2 @@ -166,7 +166,7 @@ {% endmacro %} {% macro select_input(field, multiple=False) -%} -