Merge remote-tracking branch 'cas2/master'
[django-cas-provider.git] / cas_provider / forms.py
index 652f437..8ec7a22 100644 (file)
@@ -1,52 +1,33 @@
 from django import forms
 from django.conf import settings
 from django.contrib.auth import authenticate
+from django.contrib.auth.forms import AuthenticationForm
 from django.forms import ValidationError
 from django.utils.translation import ugettext_lazy as _
 from models import LoginTicket
 import datetime
 
 
-__all__ = ['LoginForm', ]
-
-
-class LoginForm(forms.Form):
-    username = forms.CharField(max_length=30, label=_('username'))
-    password = forms.CharField(widget=forms.PasswordInput, label=_('password'))
-    lt = forms.CharField(widget=forms.HiddenInput)
+class LoginForm(AuthenticationForm):
+    email = forms.CharField(widget=forms.TextInput(attrs={'autofocus': 'autofocus',
+                                                          'max_length': '255'}))
+    password = forms.CharField(widget=forms.PasswordInput)
     service = forms.CharField(widget=forms.HiddenInput, required=False)
+    remember_me = forms.BooleanField(required=False, label="Keep me signed in",
+                                     widget=forms.CheckboxInput(attrs={'class': 'remember_me'}))
 
     def __init__(self, *args, **kwargs):
+        # renew = kwargs.pop('renew', None)
+        # gateway = kwargs.pop('gateway', None)
+        request = kwargs.pop('request', None)
         super(LoginForm, self).__init__(*args, **kwargs)
-        self._user = None
-
-    def clean_lt(self):
-        ticket = self.cleaned_data['lt']
-        timeframe = datetime.datetime.now() - \
-                    datetime.timedelta(minutes=settings.CAS_TICKET_EXPIRATION)
-        try:
-            return LoginTicket.objects.get(ticket=ticket, created__gte=timeframe)
-        except LoginTicket.DoesNotExist:
-            raise ValidationError(_('Login ticket expired. Please try again.'))
-        return ticket
+        self.request = request
 
-    def clean(self):
-        username = self.cleaned_data.get('username')
-        password = self.cleaned_data.get('password')
-        user = authenticate(username=username, password=password)
-        if user is None:
-            raise ValidationError(_('Incorrect username and/or password.'))
-        if not user.is_active:
-            raise ValidationError(_('This account is disabled.'))
-        self._user = user
-        self.cleaned_data.get('lt').delete()
-        return self.cleaned_data
+    def clean_remember_me(self):
+        remember = self.cleaned_data['remember_me']
+        if not remember and self.request is not None:
+            self.request.session.set_expiry(0)
+            
 
-    def get_user(self):
-        return self._user
-    
-    def get_errors(self):
-        errors = []
-        for k, error in self.errors.items():
-            errors += [e for e in error]
-        return errors
+class MergeLoginForm(LoginForm):
+    email = forms.CharField(max_length=255, widget=forms.HiddenInput)