| from django import forms |
| |
| from django.contrib.auth import authenticate |
| from django.contrib.auth.forms import AuthenticationForm |
| from django.contrib.auth.models import User |
| |
| from django.utils.translation import ugettext_lazy, ugettext as _ |
| |
| ERROR_MESSAGE = ugettext_lazy("Please enter a correct username and password. " |
| "Note that both fields are case-sensitive.") |
| |
| class AdminAuthenticationForm(AuthenticationForm): |
| """ |
| A custom authentication form used in the admin app. |
| |
| """ |
| this_is_the_login_form = forms.BooleanField(widget=forms.HiddenInput, initial=1, |
| error_messages={'required': ugettext_lazy("Please log in again, because your session has expired.")}) |
| |
| def clean(self): |
| username = self.cleaned_data.get('username') |
| password = self.cleaned_data.get('password') |
| message = ERROR_MESSAGE |
| |
| if username and password: |
| self.user_cache = authenticate(username=username, password=password) |
| if self.user_cache is None: |
| if username is not None and u'@' in username: |
| # Mistakenly entered e-mail address instead of username? Look it up. |
| try: |
| user = User.objects.get(email=username) |
| except (User.DoesNotExist, User.MultipleObjectsReturned): |
| # Nothing to do here, moving along. |
| pass |
| else: |
| if user.check_password(password): |
| message = _("Your e-mail address is not your username." |
| " Try '%s' instead.") % user.username |
| raise forms.ValidationError(message) |
| elif not self.user_cache.is_active or not self.user_cache.is_staff: |
| raise forms.ValidationError(message) |
| self.check_for_test_cookie() |
| return self.cleaned_data |