# -*- coding: utf-8 -*- from django import forms from django.conf import settings from django.utils.translation import ugettext_lazy as _ class AuthenticationForm(forms.Form): """ Simple form to allow users to access a page via a password. A copy of django.contrib.auth.forms.AuthenticationForm, adapted to this much simpler use case. """ password = forms.CharField(label=_("Password"), widget=forms.PasswordInput) def __init__(self, request=None, *args, **kwargs): """ If request is passed in, the form will validate that cookies are enabled. Note that the request (a HttpRequest object) must have set a cookie with the key TEST_COOKIE_NAME and value TEST_COOKIE_VALUE before running this validation. """ self.request = request super(AuthenticationForm, self).__init__(*args, **kwargs) def clean(self): """ Validate that the password entered was correct. """ password = self.cleaned_data.get('password') correct_password = getattr(settings, 'PASSWORD_REQUIRED_PASSWORD', None) if not correct_password: raise forms.ValidationError(_("PASSWORD_REQUIRED_PASSWORD is not set, and thus it is currently impossible to log in.")) if not (password == correct_password or password.strip() == correct_password): raise forms.ValidationError(_("Please enter the correct password. Note that the password is case-sensitive.")) # TODO: determine whether this should move to its own method. if self.request: if not self.request.session.test_cookie_worked(): raise forms.ValidationError(_("Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in.")) return self.cleaned_data