--- /dev/null
+from django import forms
+import django.contrib.auth.forms
+from django.contrib.auth import authenticate
+
+from panikdb.aa.models import User
+
+
+class AuthenticationForm(django.contrib.auth.forms.AuthenticationForm):
+ def clean(self):
+ username = self.cleaned_data.get('username')
+ password = self.cleaned_data.get('password')
+
+ if username and password:
+ user = None
+ if '@' in username:
+ user = User.objects.filter(email=username).first()
+ if user:
+ self.user_cache = authenticate(username=user.username, password=password)
+ else:
+ self.user_cache = authenticate(username=username, password=password)
+ if self.user_cache is None:
+ # raise self.get_invalid_login_error() # 2.2.x
+ raise forms.ValidationError(
+ self.error_messages['invalid_login'],
+ code='invalid_login',
+ params={'username': self.username_field.verbose_name},
+ )
+ else:
+ self.confirm_login_allowed(self.user_cache)
+
+ return self.cleaned_data
from panikombo.urls import urlpatterns as panikombo_urlpatterns
from .poll import views as poll_views
+from .forms import AuthenticationForm
from . import views
from combo.manager.urls import urlpatterns as combo_manager_urls
auth_views.password_reset,
{'post_reset_redirect': 'auth_password_reset_done',
'email_template_name': 'registration/password_reset_email.html'}),
+ url(r'^accounts/login/$',
+ auth_views.LoginView.as_view(authentication_form=AuthenticationForm),
+ name='login'),
url(r'^accounts/', include('registration.backends.default.urls')),
url(r'^vote/$', poll_views.vote, name='vote'),