From 4a6377358a5f51545eb4ab757e85258fb6ef3a44 Mon Sep 17 00:00:00 2001 From: Nikolai Kristiansen Date: Wed, 18 Feb 2015 21:27:07 +0100 Subject: [PATCH] Refactor profile view, cleanups --- neuf_userinfo/urls.py | 20 +++++++++++ neuf_userinfo/views.py | 63 ++++++++++++++++++---------------- templates/private/profile.html | 14 ++++---- userinfosite/urls.py | 46 ++++++++----------------- 4 files changed, 74 insertions(+), 69 deletions(-) create mode 100644 neuf_userinfo/urls.py diff --git a/neuf_userinfo/urls.py b/neuf_userinfo/urls.py new file mode 100644 index 0000000..5f64d7b --- /dev/null +++ b/neuf_userinfo/urls.py @@ -0,0 +1,20 @@ +from django.conf.urls import patterns, url +from neuf_userinfo.forms import NeufSetPasswordForm +from neuf_userinfo.views import AddNewUserView + +urlpatterns = patterns( + 'neuf_userinfo.views', + url(r'^$', 'index', name='index'), + url(r'^accounts/profile/(?P\w*)$', 'profile'), + url(r'^accounts/logout/$', 'logout'), + # Set password + url(r'^accounts/password/reset/confirm/(?P[0-9A-Za-z_\-]+)/(?P[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', + 'password_reset_confirm', + {'set_password_form': NeufSetPasswordForm}), +) + +# Rewrite of usersync.neuf.no +urlpatterns += patterns( + '', + url(r'^usersync/$', AddNewUserView.as_view(), name='usersync'), +) \ No newline at end of file diff --git a/neuf_userinfo/views.py b/neuf_userinfo/views.py index 25db7a3..78234a2 100644 --- a/neuf_userinfo/views.py +++ b/neuf_userinfo/views.py @@ -1,14 +1,14 @@ # coding: utf-8 from django.conf import settings -from django.contrib.auth.decorators import login_required, permission_required +from django.contrib.auth.decorators import login_required from django.contrib.auth.forms import SetPasswordForm, AuthenticationForm from django.contrib.auth import login, logout as auth_logout +from django.contrib.auth.models import User from django.contrib.auth.tokens import default_token_generator -from django.core.exceptions import ValidationError from django.core.urlresolvers import reverse -from django.http import HttpResponse, HttpResponseRedirect, JsonResponse -from django.shortcuts import render_to_response, resolve_url, render -from django.template import RequestContext +from django.http import HttpResponseRedirect, JsonResponse +from django.http.response import HttpResponseNotFound +from django.shortcuts import resolve_url, render, get_object_or_404 from django.template.response import TemplateResponse from django.utils.http import urlsafe_base64_decode from django.views.decorators.cache import never_cache @@ -18,7 +18,6 @@ from django.views.generic import View from inside.models import InsideUser from neuf_ldap.models import LdapGroup, LdapUser from neuf_userinfo.forms import NewUserForm -from neuf_userinfo.utils import decrypt_rijndael def index(request): @@ -33,38 +32,42 @@ def index(request): else: form = AuthenticationForm(request) - return render_to_response('public/index.html', locals(), context_instance=RequestContext(request)) + return render(request, 'public/index.html', {'form': form}) @login_required -def profile(request): - # FIXME: Allmost identical to below - username = request.user.username - groups = request.user.groups.all() +def profile(request, username=None): + if not username: + user = request.user + username = request.user.username + else: + # Only allow superusers + if not request.user.is_superuser: + return HttpResponseNotFound() + + user = get_object_or_404(User, username=username) + + # TODO: Move LDAP stuff to JSON-view and load via AJAX (more fault tolerant) ldap_user = None + ldap_groups = None + ldap_private_group = None try: ldap_user = LdapUser.objects.get(username=username) except LdapUser.DoesNotExist: - return render_to_response('private/profile.html', locals(), context_instance=RequestContext(request)) + pass - ldap_groups = LdapGroup.objects.filter(usernames__contains=username) - ldap_private_group = LdapGroup.objects.get(gid=ldap_user.group) + if ldap_user: + ldap_groups = LdapGroup.objects.filter(usernames__contains=username) + ldap_private_group = LdapGroup.objects.get(gid=ldap_user.group) - return render_to_response('private/profile.html', locals(), context_instance=RequestContext(request)) - - -@permission_required('main.is_superuser') -def user_profile(request, username): - ldap_user = None - try: - ldap_user = LdapUser.objects.get(username=username) - except LdapUser.DoesNotExist: - return render_to_response('private/profile.html', locals(), context_instance=RequestContext(request)) - - groups = LdapGroup.objects.filter(usernames__contains=username) - private_group = LdapGroup.objects.get(gid=ldap_user.group) - - return render_to_response('private/profile.html', locals(), context_instance=RequestContext(request)) + response = { + 'ldap_user': ldap_user, + 'ldap_groups': ldap_groups, + 'ldap_private_group': ldap_private_group, + 'user': user + } + print response + return render(request, 'private/profile.html', response) def logout(request): @@ -127,7 +130,7 @@ class AddNewUserView(View): def get(self, request): """ - Create new user in LDAP (username, first_name, last_name, email) - - add to groups (usergroup, dns-alle), it not exists, create + - Add to groups (usergroup, dns-alle), it not exists, create - Set LDAP password - Create automount entry - Create kerberos principal and set password diff --git a/templates/private/profile.html b/templates/private/profile.html index 73f3c0a..e69e6e0 100644 --- a/templates/private/profile.html +++ b/templates/private/profile.html @@ -27,14 +27,14 @@

Dine grupper

    - {% if groups %} + {% if ldap_groups %} {% if ldap_private_group %}
  • {{ ldap_private_group }}
  • {% endif %} - {% for group in groups %} - {% if group = "dns-aktiv" %} -
  • {{ group }}
  • - {% else %} -
  • {{ group }}
  • - {% endif %} + {% for group in ldap_groups %} + {% if group = "dns-aktiv" %} +
  • {{ group }}
  • + {% else %} +
  • {{ group }}
  • + {% endif %} {% endfor %} {% else %}
  • Ingen grupper.
  • diff --git a/userinfosite/urls.py b/userinfosite/urls.py index 0c88003..0386420 100644 --- a/userinfosite/urls.py +++ b/userinfosite/urls.py @@ -1,51 +1,33 @@ +from django.conf import settings from django.conf.urls import include, patterns, url from django.contrib import admin -from neuf_userinfo.forms import NeufPasswordChangeForm, NeufSetPasswordForm, NeufPasswordResetForm -from neuf_userinfo.views import AddNewUserView + +from neuf_userinfo.forms import NeufPasswordChangeForm, NeufPasswordResetForm admin.autodiscover() -import settings - urlpatterns = patterns( '', - url(r'^admin/', include(admin.site.urls)), - url(r'^admin/doc/', include('django.contrib.admindocs.urls')), - + url(r'', include('neuf_userinfo.urls')), url(r'^userstatus/client/$', 'neuf_kerberos.views.client_status'), url(r'^userstatus/wireless/$', 'neuf_radius.views.wireless_status'), - url(r'^$', 'neuf_userinfo.views.index'), + + url(r'^admin/', include(admin.site.urls)), ) # User account views urlpatterns += patterns( - '', - url(r'^accounts/profile/$', 'neuf_userinfo.views.profile'), - url(r'^accounts/profile/(?P\w+)$', 'neuf_userinfo.views.user_profile'), - url(r'^accounts/login/$', 'django.contrib.auth.views.login'), - url(r'^accounts/logout/$', 'neuf_userinfo.views.logout'), - - # Change password - url(r'^accounts/password/change$', 'django.contrib.auth.views.password_change', + 'django.contrib.auth.views', + url(r'^accounts/login/$', 'login'), + # Password + url(r'^accounts/password/change$', 'password_change', {'password_change_form': NeufPasswordChangeForm}), - url(r'^accounts/password/change/done$', 'django.contrib.auth.views.password_change_done', name='password_change_done'), - - # Reset password (forgot password) - url(r'^accounts/password/reset$', 'django.contrib.auth.views.password_reset', + url(r'^accounts/password/change/done$', 'password_change_done', name='password_change_done'), + url(r'^accounts/password/reset$', 'password_reset', {'password_reset_form': NeufPasswordResetForm, 'from_email': settings.DEFAULT_FROM_EMAIL, 'email_template_name': 'registration/password_reset_email.txt', 'html_email_template_name': 'registration/password_reset_email.html'}), - url(r'^accounts/password/reset/done$', 'django.contrib.auth.views.password_reset_done', name='password_reset_done'), - # Set password - url(r'^accounts/password/reset/confirm/(?P[0-9A-Za-z_\-]+)/(?P[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', - 'neuf_userinfo.views.password_reset_confirm', - {'set_password_form': NeufSetPasswordForm}), - url(r'^accounts/password/reset/complete$', 'django.contrib.auth.views.password_reset_complete', name='password_reset_complete'), + url(r'^accounts/password/reset/done$', 'password_reset_done', name='password_reset_done'), + url(r'^accounts/password/reset/complete$', 'password_reset_complete', name='password_reset_complete'), ) - -# Rewrite of usersync.neuf.no -urlpatterns += patterns( - '', - url(r'^usersync/$', AddNewUserView.as_view(), name='usersync'), -) \ No newline at end of file