Archived
125 lines
5.0 KiB
Python
125 lines
5.0 KiB
Python
# coding: utf-8
|
|
import simplejson as json
|
|
|
|
from django.http import HttpResponse, HttpResponseRedirect
|
|
from django.contrib.auth import login, logout as auth_logout
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.contrib.auth.forms import SetPasswordForm, AuthenticationForm
|
|
from django.contrib.auth.models import User
|
|
from django.contrib.auth.tokens import default_token_generator
|
|
from django.core.exceptions import ObjectDoesNotExist
|
|
from django.core.urlresolvers import reverse
|
|
from django.shortcuts import render_to_response, get_object_or_404
|
|
from django.template import RequestContext
|
|
from django.utils.http import base36_to_int
|
|
from django.views.decorators.cache import never_cache
|
|
from django.views.decorators.csrf import csrf_protect
|
|
|
|
from forms import LDAPPasswordResetForm
|
|
from models import *
|
|
import utils
|
|
|
|
def index(request):
|
|
if request.method == "POST":
|
|
form = AuthenticationForm(data=request.POST)
|
|
if form.is_valid():
|
|
# Log the user in.
|
|
login(request, form.get_user())
|
|
else:
|
|
if request.user.is_authenticated():
|
|
return HttpResponseRedirect( reverse('main.views.profile') )
|
|
else:
|
|
form = AuthenticationForm(request)
|
|
|
|
return render_to_response('public/index.html', locals(), context_instance=RequestContext(request))
|
|
|
|
@login_required
|
|
def profile(request):
|
|
ldap_user = None
|
|
try:
|
|
ldap_user = LdapUser.objects.get(username=request.user)
|
|
except:
|
|
return render_to_response('private/profile.html', locals(), context_instance=RequestContext(request))
|
|
|
|
groups = LdapGroup.objects.filter(usernames__contains=request.user)
|
|
private_group = LdapGroup.objects.filter(gid=ldap_user.group)[0]
|
|
|
|
return render_to_response('private/profile.html', locals(), context_instance=RequestContext(request))
|
|
|
|
#todo security
|
|
def client_status(request):
|
|
krb5_principal = utils.get_kerberos_principal(request.user)
|
|
if krb5_principal:
|
|
last_succ_auth = utils.format_krb5_date(krb5_principal['last successful authentication'])
|
|
status = { 'active' : True,
|
|
'last_successful_auth' : last_succ_auth,
|
|
'last_modified' : krb5_principal['Last modified'] }
|
|
else:
|
|
status = { 'active' : False }
|
|
return HttpResponse(json.dumps(status), content_type='application/javascript; charset=utf8')
|
|
|
|
#todo security
|
|
def wireless_status(request):
|
|
try:
|
|
radius_user = Radcheck.objects.get(username=request.user)
|
|
# get last authentication
|
|
last_auth = Radpostauth.objects.filter(username__iexact=request.user,reply='Access-Accept').order_by('authdate')
|
|
if len(last_auth) != 0:
|
|
status = { 'active' : True,
|
|
'last_successful_auth': last_auth[0].authdate.strftime('%Y-%m-%d %H:%M:%S'),
|
|
'hash': radius_user.attribute }
|
|
else:
|
|
status = { 'active' : True, 'hash': radius_user.attribute }
|
|
except ObjectDoesNotExist:
|
|
status = { 'active' : False }
|
|
return HttpResponse(json.dumps(status), content_type='application/javascript; charset=utf8')
|
|
|
|
def logout(request):
|
|
auth_logout(request)
|
|
return render_to_response('registration/logout.html', locals(), context_instance=RequestContext(request))
|
|
|
|
# Doesn't need csrf_protect since no-one can guess the URL
|
|
@never_cache
|
|
def password_reset_confirm(request, uidb36=None, token=None,
|
|
template_name='registration/password_reset_confirm.html',
|
|
token_generator=default_token_generator,
|
|
set_password_form=SetPasswordForm,
|
|
post_reset_redirect=None,
|
|
current_app=None, extra_context=None):
|
|
"""
|
|
View that checks the hash in a password reset link and presents a
|
|
form for entering a new password.
|
|
|
|
Note: this is the same view as django.contrib.auth.views.password_reset_confirm
|
|
with only minor changes.
|
|
"""
|
|
assert uidb36 is not None and token is not None # checked by URLconf
|
|
if post_reset_redirect is None:
|
|
post_reset_redirect = reverse('django.contrib.auth.views.password_reset_complete')
|
|
try:
|
|
uid_int = base36_to_int(uidb36)
|
|
user = LdapUser.objects.get(id=uid_int) # Diff line vs internal django view
|
|
except (ValueError, User.DoesNotExist):
|
|
user = None
|
|
|
|
if user is not None and token_generator.check_token(user, token):
|
|
validlink = True
|
|
if request.method == 'POST':
|
|
form = set_password_form(user, request.POST)
|
|
if form.is_valid():
|
|
form.save()
|
|
return HttpResponseRedirect(post_reset_redirect)
|
|
else:
|
|
form = set_password_form(None)
|
|
else:
|
|
validlink = False
|
|
form = None
|
|
context = {
|
|
'form': form,
|
|
'validlink': validlink,
|
|
}
|
|
context.update(extra_context or {})
|
|
return render_to_response(template_name, context,
|
|
context_instance=RequestContext(request, current_app=current_app))
|
|
|