diff --git a/web/warpauth/templates/warpauth/profile/change_password.html b/web/warpauth/templates/warpauth/profile/change_password.html index 7f9a76827208957f6b5e924fd0c768d9350c91c2..d2e48ad24bc925a7346687f2505c4a6e4f8fb6e6 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 07002e50ebf7659025b967bc2ea8da0a73ff2009..8e5288b7b02b18dd54b3beb89c5214677b4bb245 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 3f881d691061727d154e11e6175c167952e7dad7..24ec821b0a5a4f31e30ec4680b78ccc7b9e54b62 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 5d0853801553df7b82b6ef07436abb038154f613..2db2d4ea44a9cbda8c6105e660e00574ba4a0f50 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 dbd23b862b0425fe627fd1397d7eef3e05f8bc08..34128273b2a2b720c0d41a9e3026ac1cb96444d2 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) +