Implement realm update

This commit is contained in:
Götz 2019-03-29 02:28:51 +01:00
parent 5dcafd2bc6
commit dd4554b95e
8 changed files with 68 additions and 54 deletions

View File

@ -1,3 +1,7 @@
from django.contrib import admin from django.contrib import admin
from .models import Realm, LdapGroupRDN, LdapUserRDN
# Register your models here. # Register your models here.
admin.site.register(Realm)
admin.site.register(LdapGroupRDN)
admin.site.register(LdapUserRDN)

View File

@ -6,9 +6,9 @@ from .models import LdapUser, LdapGroup
class AddLDAPUserForm(forms.Form): class AddLDAPUserForm(forms.Form):
rdn = forms.ModelChoiceField(queryset=LdapUserRDN.objects.all()) rdn = forms.ModelChoiceField(queryset=LdapUserRDN.objects.all())
username = forms.CharField(label='username', max_length=400) username = forms.CharField(label='Nutzername', max_length=400)
first_name = forms.CharField(label='first_name', max_length=400) first_name = forms.CharField(label='Vorname', max_length=400)
last_name = forms.CharField(label='last_name', max_length=400) last_name = forms.CharField(label='Nachname', max_length=400)
password = forms.CharField(widget=forms.PasswordInput) password = forms.CharField(widget=forms.PasswordInput)
@ -19,12 +19,18 @@ class AddLDAPGroupForm(forms.Form):
class RealmAddForm(forms.Form): class RealmAddForm(forms.Form):
name = forms.CharField(label='name', max_length=200) name = forms.CharField(label='Bereichsname', max_length=200)
ldap_rdn_org = forms.CharField(label='ldap_rdn_org', max_length=200) ldap_rdn_org = forms.CharField(label='LDAP OU Pfad',
help_text='Angabe des Pfads zur Organisation, die die Ordnungseinheiten people und groups enthält. Ohne Routdn. Besipiel: "ou=people, ou=fs_wiai, ou=fachschaften, dc=stuve, dc=de" => ou=fs_wiai, ou=fachschaften, dc=stuve',
max_length=200)
class RealmUpdateForm(forms.Form): class RealmUpdateForm(forms.Form):
ldap_rdn_org = forms.CharField(label='ldap_rdn_org', max_length=200) ldap_rdn_org = forms.CharField(label='LDAP OU Pfad',
name = forms.CharField(label='name', max_length=200) help_text='Angabe des Pfads zur Organisation, die die Ordnungseinheiten people und groups enthält. Ohne Routdn. Besipiel: "ou=people, ou=fs_wiai, ou=fachschaften, dc=stuve, dc=de" => ou=fs_wiai, ou=fachschaften, dc=stuve',
email = forms.EmailField() max_length=200)
admin_group = forms.ModelChoiceField(widget=forms.CheckboxSelectMultiple, queryset=LdapGroup.objects.all()) name = forms.CharField(label='Bereichsname', max_length=200)
email = forms.EmailField(label='E-Mail', required=False)
admin_group = forms.ModelChoiceField(label='Admin Grouppe',
help_text="Die Mitglieder dieser Gruppe darf den Bereich administieren",
queryset=LdapGroup.objects.all())

View File

@ -17,7 +17,6 @@ class Command(BaseCommand):
ldap_dn = ldap_config[1].split(',') ldap_dn = ldap_config[1].split(',')
ldap_dn.pop(0) ldap_dn.pop(0)
ldap_dn = ",".join(ldap_dn) ldap_dn = ",".join(ldap_dn)
print(ldap_dn)
results = ldap_server.search_s(ldap_dn, ldap.SCOPE_SUBTREE, results = ldap_server.search_s(ldap_dn, ldap.SCOPE_SUBTREE,
"(objectClass=inetOrgPerson)") "(objectClass=inetOrgPerson)")

View File

@ -7,7 +7,7 @@ urlpatterns = [
path('user/list/', views.userlist, name='user-list'), path('user/list/', views.userlist, name='user-list'),
path('user/get/<str:dn>/', views.user_detail, name='user'), path('user/get/<str:dn>/', views.user_detail, name='user'),
path('user/add/', views.adduser, name='user-add'), path('user/add/', views.user_add, name='user-add'),
path('group/add/', views.addgroup, name='group-add'), path('group/add/', views.group_add, name='group-add'),
path('group/get/<str:dn>/', views.group_detail, name='group'), path('group/get/<str:dn>/', views.group_detail, name='group'),
] ]

View File

@ -2,6 +2,7 @@ from django.shortcuts import render, redirect
from .models import LdapGroup, LdapUser from .models import LdapGroup, LdapUser
from .forms import AddLDAPUserForm, AddLDAPGroupForm, RealmAddForm, RealmUpdateForm from .forms import AddLDAPUserForm, AddLDAPGroupForm, RealmAddForm, RealmUpdateForm
from account_helper.models import Realm from account_helper.models import Realm
from django.contrib.auth.models import User, Group
# @login_required # @login_required
@ -37,9 +38,12 @@ def realm_detail(request, id):
if request.method == 'POST': if request.method == 'POST':
form = RealmUpdateForm(request.POST) form = RealmUpdateForm(request.POST)
if form.is_valid(): if form.is_valid():
name = form.cleaned_data['name'] realm_obj.name = form.cleaned_data['name']
ldap_rdn_org = form.cleaned_data['ldap_rdn_org'] realm_obj.ldap_rdn_org = form.cleaned_data['ldap_rdn_org']
realm_obj = Realm.objects.create(name=name, ldap_rdn_org=ldap_rdn_org) realm_obj.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() realm_obj.save()
return redirect('realm-detail', realm_obj.id) return redirect('realm-detail', realm_obj.id)
else: else:
@ -55,22 +59,16 @@ def userlist(request):
groups = LdapGroup.objects.all() groups = LdapGroup.objects.all()
context = {'users': user, 'groups': groups} context = {'users': user, 'groups': groups}
return render(request, 'user_list.jinja', context) return render(request, 'user/user_list.jinja', context)
def user_detail(request, dn): def user_detail(request, dn):
user = LdapUser.objects.get(dn=dn) user = LdapUser.objects.get(dn=dn)
context = {'user': user, } context = {'user': user, }
return render(request, 'user_detail.jinja', context) return render(request, 'user/user_detail.jinja', context)
def group_detail(request, dn): def user_add(request):
group = LdapGroup.objects.get(dn=dn)
context = {'group': group, }
return render(request, 'group_detail.jinja', context)
def adduser(request):
# if this is a POST request we need to process the form data # if this is a POST request we need to process the form data
if request.method == 'POST': if request.method == 'POST':
# create a form instance and populate it with data from the request: # create a form instance and populate it with data from the request:
@ -91,10 +89,16 @@ def adduser(request):
else: else:
form = AddLDAPUserForm() form = AddLDAPUserForm()
return render(request, 'user_add.jinja', {'form': form}) return render(request, 'user/user_add.jinja', {'form': form})
def addgroup(request): def group_detail(request, dn):
group = LdapGroup.objects.get(dn=dn)
context = {'group': group, }
return render(request, 'user/group_detail.jinja', context)
def group_add(request):
# if this is a POST request we need to process the form data # if this is a POST request we need to process the form data
if request.method == 'POST': if request.method == 'POST':
# create a form instance and populate it with data from the request: # create a form instance and populate it with data from the request:
@ -112,4 +116,4 @@ def addgroup(request):
else: else:
form = AddLDAPGroupForm() form = AddLDAPGroupForm()
return render(request, 'group_add.jinja', {'form': form}) return render(request, 'group/group_add.jinja', {'form': form})

View File

@ -148,34 +148,23 @@ AUTHENTICATION_BACKENDS = [
AUTH_LDAP_1_SERVER_URI = "ldap://localhost:1389" AUTH_LDAP_1_SERVER_URI = "ldap://localhost:1389"
AUTH_LDAP_1_USER_DN_TEMPLATE = "uid=%(user)s,ou=people,ou=fs_wiai,ou=fachschaften,dc=stuve,dc=de" AUTH_LDAP_1_USER_DN_TEMPLATE = "uid=%(user)s,ou=people,ou=fs_wiai,ou=fachschaften,dc=stuve,dc=de"
AUTH_LDAP_1_GROUP_SEARCH = LDAPSearch("ou=groups,ou=fs_wiai,ou=fachschaften,dc=stuve,dc=de", AUTH_LDAP_1_GROUP_SEARCH = LDAPSearch("dc=stuve,dc=de",
ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)" ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)"
) )
AUTH_LDAP_1_GROUP_TYPE = GroupOfNamesType() AUTH_LDAP_1_GROUP_TYPE = GroupOfNamesType(name_attr='cn')
AUTH_LDAP_1_MIRROR_GROUPS = True
AUTH_LDAP_2_SERVER_URI = "ldap://localhost:1389" AUTH_LDAP_2_SERVER_URI = "ldap://localhost:1389"
AUTH_LDAP_2_USER_DN_TEMPLATE = "uid=%(user)s,ou=people,ou=fs_sowi,ou=fachschaften,dc=stuve,dc=de" AUTH_LDAP_2_USER_DN_TEMPLATE = "uid=%(user)s,ou=people,ou=fs_sowi,ou=fachschaften,dc=stuve,dc=de"
AUTH_LDAP_2_GROUP_SEARCH = LDAPSearch("ou=groups,ou=fs_sowi,ou=fachschaften,dc=stuve,dc=de", AUTH_LDAP_2_GROUP_SEARCH = LDAPSearch("dc=stuve,dc=de",
ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)" ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)"
) )
AUTH_LDAP_2_GROUP_TYPE = GroupOfNamesType() AUTH_LDAP_2_GROUP_TYPE = GroupOfNamesType(name_attr='cn')
AUTH_LDAP_2_MIRROR_GROUPS = True
AUTH_LDAP_PROFILE_ATTR_MAP = { AUTH_LDAP_USER_ATTR_MAP = {
"uid": "uid", 'first_name': 'cn',
"cn": "cn", 'last_name': 'sn',
"sn": "sn", 'email': 'mail',
"givenName": "givenName",
"userPassword": "userPassword",
"shadowLastChange": "shadowLastChange",
"shadowMax": "shadowMax",
"shadowWarning": "shadowWarning",
"loginShell": "loginShell",
"uidNumber": "uidNumber",
"gidNumber": "gidNumber",
"homeDirectory": "homeDirectory",
"gecos": "gecos",
"mail": "mail",
"l": "l",
"telephoneNumber": "telephoneNumber",
} }
AUTH_PROFILE_MODULE = 'account_manager.UserProfile' AUTH_PROFILE_MODULE = 'account_manager.UserProfile'

View File

@ -1,11 +1,23 @@
{% extends 'base.jinja' %} {% extends 'base.jinja' %}
{% block content %} {% block content %}
<a href="{{ url('user-add') }}">Nutzer anlegen</a> | <a href="{{ url('group-add') }}">Gruppe anlegen</a> <a href="{{ url('user-add') }}">Nutzer anlegen</a> | <a href="{{ url('group-add') }}">Gruppe anlegen</a>
<h1>Bereich {{ realm.name }}</h1>
<h2>Bereich Info</h2>
<p>LDAP OU: {{ realm.ldap_rdn_org }}</p>
<p>Email: {{ realm.email }}</p>
<p>Admin Gruppe: {{ realm.admin_group }}</p>
<h2>Neuen Bereich anlegen</h2> <h2>Bereichsinformationen anpassen</h2>
<form method="post"> <form method="post">
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}"> <input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
{{ form.as_p()|safe }} {{ form.as_p()|safe }}
<button type="submit">Speichern</button> <button type="submit">Speichern</button>
</form> </form>
<h2>Nutzer</h2>
{% block user_content %}
{% endblock %}
<h2>Gruppen</h2>
{% block gruppen_content %}
{% endblock %}
{% endblock %} {% endblock %}

View File