diff --git a/auth/forms.py b/auth/forms.py index 6b4e9eba3..d618ab436 100644 --- a/auth/forms.py +++ b/auth/forms.py @@ -10,3 +10,7 @@ class LoginForm(forms.Form): label=_("Password"), widget=forms.PasswordInput(attrs={"class" : "span3"}) ) + rememberme = forms.BooleanField( + initial=False, + required=False + ) diff --git a/auth/views.py b/auth/views.py index f0bdd145b..f11db3bc4 100755 --- a/auth/views.py +++ b/auth/views.py @@ -1,11 +1,11 @@ # coding: utf-8 +from django.views.decorators.cache import never_cache from django.contrib.auth import authenticate, login, logout -from django.http import HttpResponse, HttpResponseRedirect -from django.template import RequestContext -from django.shortcuts import render_to_response +from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse from django.utils.translation import ugettext as _ from modoboa.lib import events +from modoboa.lib.webutils import _render from modoboa.admin import views as admviews from forms import LoginForm from modoboa.auth.lib import * @@ -14,37 +14,42 @@ def dologin(request): error = None if request.method == "POST": form = LoginForm(request.POST) - user = authenticate(username=request.POST["username"], - password=request.POST["password"]) - if user: - if user.is_active: - login(request, user) - - if request.user.id != 1: - request.session["password"] = encrypt(request.POST["password"]) + if form.is_valid(): + user = authenticate(username=form.cleaned_data["username"], + password=form.cleaned_data["password"]) + if user: + if user.is_active: + if not form.cleaned_data["rememberme"]: + request.session.set_expiry(0) + login(request, user) + if request.user.id != 1: + request.session["password"] = encrypt(request.POST["password"]) - request.session["django_language"] = \ - parameters.get_user(request.user, "LANG", app="general") + request.session["django_language"] = \ + parameters.get_user(request.user, "LANG", app="general") - events.raiseEvent("UserLogin", request, - request.POST["username"], - request.POST["password"]) + events.raiseEvent("UserLogin", request, + form.cleaned_data["username"], + form.cleaned_data["password"]) - next = request.POST["next"] - if next.strip() in ["", "None"]: - next = reverse(admviews.domains) - return HttpResponseRedirect(next) - else: - error = _("Account is disabled.") - error = _("Your username and password didn't match. Please try again.") + next = request.POST["next"] + if next.strip() in ["", "None"]: + next = reverse(admviews.domains) + return HttpResponseRedirect(next) + else: + error = _("Account is disabled.") + error = _("Your username and password didn't match. Please try again.") + next = request.POST.get("next", None) else: form = LoginForm() + next = request.GET.get("next", None) - next = request.GET.has_key("next") and request.GET["next"] or None - return render_to_response("registration/login.html", { + return _render(request, "registration/login.html", { "form" : form, "error" : error, "next" : next, "annoucements" : events.raiseQueryEvent("GetAnnouncement", "loginpage") - }, context_instance=RequestContext(request)) + }) + +dologin = never_cache(dologin) def dologout(request): events.raiseEvent("UserLogout", request) diff --git a/templates/registration/login.html b/templates/registration/login.html index ca427d2a4..a1a450886 100644 --- a/templates/registration/login.html +++ b/templates/registration/login.html @@ -28,10 +28,11 @@
- {% render_form form %} + {% render_field form.username %} + {% render_field form.password %}
-