Add realm overview

This commit is contained in:
Götz 2019-03-28 18:04:03 +01:00
parent fe3b61a3c1
commit 73a8ff5380
23 changed files with 137 additions and 28 deletions

View File

@ -2,4 +2,4 @@ from django.apps import AppConfig
class RdnHelperConfig(AppConfig): class RdnHelperConfig(AppConfig):
name = 'rdn_helper' name = 'account_helper'

View File

@ -1,5 +1,5 @@
from django.core.management.base import BaseCommand, CommandError from django.core.management.base import BaseCommand, CommandError
from rdn_helper.models import LdapGroupRDN, LdapUserRDN from account_helper.models import LdapGroupRDN, LdapUserRDN
LDAP_OUS = ['ou=fs_wiai,ou=fachschaften', 'ou=fs_sowi,ou=fachschaften'] LDAP_OUS = ['ou=fs_wiai,ou=fachschaften', 'ou=fs_sowi,ou=fachschaften']

27
account_helper/models.py Normal file
View File

@ -0,0 +1,27 @@
from django.db import models
from django.contrib.auth.models import User, Group
# Create your models here.
class Realm(models.Model):
name = models.CharField(max_length=200, unique=True)
email = models.EmailField(blank=True, null=True)
admin_group = models.ForeignKey(Group, models.PROTECT, blank=True, null=True)
ldap_rdn_org = models.CharField(max_length=400, unique=True)
def __str__(self):
return f'{self.name} - {self.ldap_rdn_org}'
class LdapUserRDN(models.Model):
rdn = models.CharField(max_length=400, unique=True)
def __str__(self):
return self.rdn
class LdapGroupRDN(models.Model):
rdn = models.CharField(max_length=400, unique=True)
def __str__(self):
return self.rdn

View File

@ -1,5 +1,6 @@
from django import forms from django import forms
from rdn_helper.models import LdapUserRDN, LdapGroupRDN from django.contrib.auth.models import User, Group
from account_helper.models import LdapUserRDN, LdapGroupRDN
from .models import LdapUser from .models import LdapUser
@ -15,3 +16,15 @@ class AddLDAPGroupForm(forms.Form):
rdn = forms.ModelChoiceField(queryset=LdapGroupRDN.objects.all()) rdn = forms.ModelChoiceField(queryset=LdapGroupRDN.objects.all())
name = forms.CharField(label='name', max_length=400) name = forms.CharField(label='name', max_length=400)
members = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple, queryset=LdapUser.objects.all()) members = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple, queryset=LdapUser.objects.all())
class RealmAddForm(forms.Form):
name = forms.CharField(label='name', max_length=200)
ldap_rdn_org = forms.CharField(label='ldap_rdn_org', max_length=200)
class RealmUpdateForm(forms.Form):
ldap_rdn_org = forms.CharField(label='ldap_rdn_org', max_length=200)
name = forms.CharField(label='name', max_length=200)
email = forms.EmailField()
admins = forms.ModelChoiceField(widget=forms.CheckboxSelectMultiple, queryset=Group.objects.all())

View File

@ -2,6 +2,8 @@ from django.urls import path
from . import views from . import views
urlpatterns = [ urlpatterns = [
path('realm/', views.realm, name='realm-home'),
path('realm/<int:id>/', views.realm_detail, name='realm-detail'),
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'),

View File

@ -1,6 +1,7 @@
from django.shortcuts import render, redirect from django.shortcuts import render, redirect
from .models import LdapGroup, LdapUser from .models import LdapGroup, LdapUser
from .forms import AddLDAPUserForm, AddLDAPGroupForm from .forms import AddLDAPUserForm, AddLDAPGroupForm, RealmAddForm, RealmUpdateForm
from account_helper.models import Realm
# @login_required # @login_required
@ -12,18 +13,47 @@ from .forms import AddLDAPUserForm, AddLDAPGroupForm
# context = {'request': request, 'ldapuser': ldapuserprofile, } # context = {'request': request, 'ldapuser': ldapuserprofile, }
# return render(request, 'myapp/userinfo.html', context) # return render(request, 'myapp/userinfo.html', context)
def realm(request):
realms = Realm.objects.all()
if request.method == 'POST':
form = RealmAddForm(request.POST)
if form.is_valid():
name = form.cleaned_data['name']
ldap_rdn_org = form.cleaned_data['ldap_rdn_org']
realm_obj = Realm.objects.create(name=name, ldap_rdn_org=ldap_rdn_org)
realm_obj.save()
return redirect('realm-detail', realm_obj.id)
else:
form = RealmAddForm()
return render(request, 'realm/realm_home.jinja', {'realms': realms, 'form': form})
def realm_detail(request, id):
if request.user.is_superuser:
realm_obj = Realm.objects.get(id=id)
data = {'id': realm_obj.id, 'ldap_rdn_org': realm_obj.ldap_rdn_org, 'name': realm_obj.name,
'email': realm_obj.email,
'admin_group': realm_obj.admin_group}
if request.method == 'POST':
form = RealmUpdateForm(request.POST)
if form.is_valid():
name = form.cleaned_data['name']
ldap_rdn_org = form.cleaned_data['ldap_rdn_org']
realm_obj = Realm.objects.create(name=name, ldap_rdn_org=ldap_rdn_org)
realm_obj.save()
return redirect('realm-detail', realm_obj.id)
else:
form = RealmUpdateForm(initial=data)
return render(request, 'realm/realm_home.jinja', {'realm': realm_obj, 'form': form})
else:
realm_obj = Realm.objects.get(id=id)
return render(request, 'realm/realm_home.jinja', {'realm': realm_obj})
def userlist(request): def userlist(request):
user = LdapUser.objects.all() user = LdapUser.objects.all()
groups = LdapGroup.objects.all() groups = LdapGroup.objects.all()
context = {'users': user, 'groups': groups} context = {'users': user, 'groups': groups}
# ldap_user = LdapUser.objects.get(username='fred')
# ldap_user = LdapUser.objects.create(rdn='ou=people,ou=fs_wiai,ou=fachschaften', username='b3',
# password='lappen1', first_name='ferdinand1',
# last_name='red1', )
# new_group = LdapGroup.objects.create(rdn='ou=groups,ou=fs_wiai,ou=fachschaften', name="funny_wiai12",
# members=['dc=stuve,dc=de'])
# new_group.save()
return render(request, 'user_list.jinja', context) return render(request, 'user_list.jinja', context)

View File

@ -29,6 +29,8 @@ DEBUG = True
ALLOWED_HOSTS = [] ALLOWED_HOSTS = []
# Application definition # Application definition
LOGIN_URL = 'login'
LOGIN_REDIRECT_URL = 'realm-home'
INSTALLED_APPS = [ INSTALLED_APPS = [
'django.contrib.admin', 'django.contrib.admin',
@ -38,7 +40,7 @@ INSTALLED_APPS = [
'django.contrib.messages', 'django.contrib.messages',
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'account_manager', 'account_manager',
'rdn_helper', 'account_helper',
] ]
MIDDLEWARE = [ MIDDLEWARE = [

View File

@ -15,8 +15,11 @@ Including another URLconf
""" """
from django.contrib import admin from django.contrib import admin
from django.urls import path, include from django.urls import path, include
from django.contrib.auth import views as auth_views
urlpatterns = [ urlpatterns = [
path('', include('account_manager.urls')), path('', include('account_manager.urls')),
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
path('login/', auth_views.LoginView.as_view(), name='login'),
path('logout/', auth_views.LogoutView.as_view(), {'next_page': '/'}, name='logout'),
] ]

View File

@ -1,16 +0,0 @@
from django.db import models
# Create your models here.
class LdapUserRDN(models.Model):
rdn = models.CharField(max_length=400, unique=True)
def __str__(self):
return self.rdn
class LdapGroupRDN(models.Model):
rdn = models.CharField(max_length=400, unique=True)
def __str__(self):
return self.rdn

View File

@ -0,0 +1,15 @@
{% extends 'base.jinja' %}
{% block content %}
<a href="{{ url('user-add') }}">Nutzer anlegen</a> | <a href="{{ url('group-add') }}">Gruppe anlegen</a>
<h2>Neuen Bereich anlegen</h2>
<form method="post">
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
{{ form.as_p()|safe }}
<button type="submit">Login</button>
</form>
<h2>Realms</h2>
{% for realm in realms %}
<p>{{ realm.name }}</p>
{% endfor %}
{% endblock %}

View File

@ -0,0 +1,15 @@
{% extends 'base.jinja' %}
{% block content %}
<a href="{{ url('user-add') }}">Nutzer anlegen</a> | <a href="{{ url('group-add') }}">Gruppe anlegen</a>
<h2>Neuen Bereich anlegen</h2>
<form method="post">
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
{{ form.as_p()|safe }}
<button type="submit">Login</button>
</form>
<h2>Realms</h2>
{% for realm in realms %}
<p>{{ realm.name }}</p>
{% endfor %}
{% endblock %}

View File

@ -0,0 +1,18 @@
{% extends 'base.jinja' %}
{% block title %}Login{% endblock %}
{% block content %}
<div class="col-12 ">
<div class="row justify-content-center justify-content-sm-center">
<div class="col-12 col-sm-6 col-md-5 col-lg-4 col-xl-3 bg-white text-dark text-center p-3 mt-5">
<h2>Login</h2>
<form method="post">
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
{{ form.as_p()|safe }}
<button type="submit">Login</button>
</form>
</div>
</div>
</div>
{% endblock %}