diff -r 88d36ba3f6c9 -r eab6629b5b31 src/hdalab/views/profile.py --- a/src/hdalab/views/profile.py Thu Jul 24 16:25:52 2014 +0200 +++ b/src/hdalab/views/profile.py Tue Aug 19 18:29:35 2014 +0200 @@ -4,11 +4,24 @@ @author: tc ''' + + from datetime import datetime +from django.conf import settings +from django.contrib.auth import REDIRECT_FIELD_NAME, login as auth_login +from django.contrib.auth.forms import AuthenticationForm +from django.contrib.sites.models import get_current_site +from django.core.urlresolvers import reverse from django.db.models import Q from django.http import HttpResponse +from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404, redirect -from django.views.decorators.csrf import csrf_exempt +from django.shortcuts import resolve_url +from django.template.response import TemplateResponse +from django.utils.http import is_safe_url +from django.views.decorators.cache import never_cache +from django.views.decorators.csrf import csrf_exempt, csrf_protect +from django.views.decorators.debug import sensitive_post_parameters from django.views.generic import TemplateView, View from hdabo.models import Tag from hdalab.models.renkan import HdalabRenkan @@ -20,8 +33,8 @@ import uuid + import logging -from django.core.urlresolvers import reverse logger = logging.getLogger(__name__) @@ -80,6 +93,9 @@ if rk.owner!=self.request.user: raise Exception("You are not allowed to edit this renkan") + form = AuthenticationForm(self.request) + context["form"] = form + return context @@ -252,4 +268,47 @@ if "next" in request.GET: return redirect(request.GET["next"]) return redirect(reverse('profile_home')) + + + +# Function copied from django.contrib.auth.views to simplify ajax login +@sensitive_post_parameters() +@csrf_protect +@never_cache +def ajax_login(request, template_name='ajax_identification/ajax_login.html', + redirect_field_name=REDIRECT_FIELD_NAME, + authentication_form=AuthenticationForm, + current_app=None, extra_context=None): + """ + Displays the login form and handles the login action. + """ + redirect_to = request.REQUEST.get(redirect_field_name, '') + + if request.method == "POST": + form = authentication_form(request, data=request.POST) + if form.is_valid(): + + # Ensure the user-originating redirection url is safe. + if not is_safe_url(url=redirect_to, host=request.get_host()): + redirect_to = resolve_url(settings.LOGIN_REDIRECT_URL) + + # Okay, security check complete. Log the user in. + auth_login(request, form.get_user()) + + return HttpResponseRedirect(redirect_to) + else: + form = authentication_form(request) + + current_site = get_current_site(request) + + context = { + 'form': form, + redirect_field_name: redirect_to, + 'site': current_site, + 'site_name': current_site.name, + } + if extra_context is not None: + context.update(extra_context) + return TemplateResponse(request, template_name, context, + current_app=current_app) \ No newline at end of file