From 2c7e444f97e4cfb8ba89f424cc04a131176b0647 Mon Sep 17 00:00:00 2001 From: Christian Dresen <c.dresen@fh-muenster.de> Date: Thu, 17 Dec 2015 12:27:55 +0100 Subject: [PATCH] Added Password Change Function --- .../warpauth/profile/change_password.html | 5 ++--- web/warpauth/urls.py | 3 ++- web/warpauth/util.py | 21 +++++++++++++++++++ web/warpauth/views/profile.py | 15 +++++++++++++ web/warpzone/settings.py | 8 +++++-- 5 files changed, 46 insertions(+), 6 deletions(-) diff --git a/web/warpauth/templates/warpauth/profile/change_password.html b/web/warpauth/templates/warpauth/profile/change_password.html index 7f9a768..d2e48ad 100644 --- a/web/warpauth/templates/warpauth/profile/change_password.html +++ b/web/warpauth/templates/warpauth/profile/change_password.html @@ -2,9 +2,8 @@ <div> <br /> - <form class="form-horizontal" method="POST" role="form"> + <form class="form-horizontal" method="POST" action="/profile/change_password/" role="form"> {% csrf_token %} - <input type="hidden" name="action" value="change_pw"> <div class="form-group"> <label class="control-label col-sm-2 col-lg-2 " for="id_old_pw">{% trans "Current Password" %}</label> <div class=" col-sm-10 col-lg-10 "> @@ -23,7 +22,7 @@ <input class=" form-control" id="id_new_pw_confirm" name="new_pw_confirm" type="password" /> </div> </div> - <div class="form-group"> + <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button style="float: left" type="submit" formmethod="post" class="btn btn-primary">Change Password</button> </div> diff --git a/web/warpauth/urls.py b/web/warpauth/urls.py index 07002e5..8e5288b 100644 --- a/web/warpauth/urls.py +++ b/web/warpauth/urls.py @@ -1,5 +1,5 @@ from django.conf.urls import url -from warpauth.views import main, login, reset_password, warp_food, profile +from warpauth.views import main, login, reset_password, profile urlpatterns = [ # Authentication Pages @@ -10,6 +10,7 @@ urlpatterns = [ url(r'^reset_password/(?P<reset_hash>\w+)/$', reset_password.change_password, name='index'), url(r'^profile/$', profile.index, name='index'), + url(r'^profile/change_password/$', profile.change_password, name='change_password'), # Main Page url(r'^$', main.index, name='index'), diff --git a/web/warpauth/util.py b/web/warpauth/util.py index 3f881d6..24ec821 100644 --- a/web/warpauth/util.py +++ b/web/warpauth/util.py @@ -1,4 +1,25 @@ +import ldap + +from warpzone import settings pages = {'pages': [ {"link":"pizza", "name": "PizzaSheet"}, {"link":"about", "name": "About"}, ]} + + +def __init_ldap(): + ldapObject = ldap.initialize(settings.AUTH_LDAP_SERVER_URI) + ldapObject.bind_s(settings.AUTH_LDAP_BIND_DN, settings.AUTH_LDAP_BIND_PASSWORD) + return ldapObject + + +def ldap_change_password(user,old_pw, new_pw): + ldapObject = __init_ldap() + try: + ldapObject.passwd_s(user,old_pw,new_pw) + return 1 + except ldap.UNWILLING_TO_PERFORM as e: + if 'unwilling to verify old password' in e: + return -1 + return 0 + diff --git a/web/warpauth/views/profile.py b/web/warpauth/views/profile.py index 5d08538..2db2d4e 100644 --- a/web/warpauth/views/profile.py +++ b/web/warpauth/views/profile.py @@ -2,11 +2,26 @@ from django.shortcuts import render from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotAllowed, HttpResponseNotFound from django.shortcuts import redirect from django.contrib.auth.decorators import login_required +from warpauth.models import LdapUser from warpauth.util import * +## +# http://www.python-ldap.org/doc/html/ldap.html#ldap.LDAPObject +## + @login_required(login_url='/login/', redirect_field_name=None) def index(request): print(request.user.ldap_user.group_names) pages['ldap_groups'] = request.user.ldap_user.group_names + #ldap_change_password(request.user.ldap_user.dn,"123456","12345") + return HttpResponse(render(request, 'warpauth/profile.html', pages)) + +@login_required(login_url='/login/', redirect_field_name=None) +def change_password(request): + if request.method != 'POST': + redirect("/") + print(request.POST) + + return HttpResponse(render(request, 'warpauth/profile.html', pages)) \ No newline at end of file diff --git a/web/warpzone/settings.py b/web/warpzone/settings.py index dbd23b8..3412827 100644 --- a/web/warpzone/settings.py +++ b/web/warpzone/settings.py @@ -120,12 +120,15 @@ AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', ) + +AUTH_LDAP_SERVER_URI = "ldap://s1.dyhost.de" + AUTH_LDAP_BIND_DN = "cn=admin,dc=warpzone,dc=ms" AUTH_LDAP_BIND_PASSWORD = "12345" -AUTH_LDAP_SERVER_URI = "ldap://s1.dyhost.de" -AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=User,dc=warpzone,dc=ms", +LDAP_USER_SEARCH_PATH = "ou=User,dc=warpzone,dc=ms" +AUTH_LDAP_USER_SEARCH = LDAPSearch(LDAP_USER_SEARCH_PATH, ldap.SCOPE_SUBTREE, "(uid=%(user)s)") AUTH_LDAP_USER_ATTR_MAP = {"first_name": "givenName", "last_name": "sn", "email": "description"} @@ -153,3 +156,4 @@ AUTH_LDAP_GROUP_CACHE_TIMEOUT = 300 logger = logging.getLogger('django_auth_ldap') logger.addHandler(logging.StreamHandler()) logger.setLevel(logging.DEBUG) + -- GitLab