Optionally renew token on password reset
authorSofia Papagiannaki <papagian@gmail.com>
Tue, 31 Jul 2012 13:38:15 +0000 (16:38 +0300)
committerSofia Papagiannaki <papagian@gmail.com>
Tue, 31 Jul 2012 13:38:15 +0000 (16:38 +0300)
Refs: #2612

snf-astakos-app/astakos/im/forms.py
snf-astakos-app/astakos/im/urls.py
snf-astakos-app/astakos/im/views.py

index f1152f4..78cd01f 100644 (file)
@@ -35,7 +35,8 @@ from datetime import datetime
 
 from django import forms
 from django.utils.translation import ugettext as _
-from django.contrib.auth.forms import UserCreationForm, AuthenticationForm, PasswordResetForm
+from django.contrib.auth.forms import UserCreationForm, AuthenticationForm, \
+    PasswordResetForm, PasswordChangeForm
 from django.core.mail import send_mail
 from django.contrib.auth.tokens import default_token_generator
 from django.template import Context, loader
@@ -466,3 +467,22 @@ class InvitationForm(forms.ModelForm):
         except Invitation.DoesNotExist:
             pass
         return username
+
+class ExtendedPasswordChangeForm(PasswordChangeForm):
+    """
+    Extends PasswordChangeForm by enabling user
+    to optionally renew also the token.
+    """
+    renew = forms.BooleanField(label='Renew token', required=False)
+    
+    def __init__(self, user, *args, **kwargs):
+        super(ExtendedPasswordChangeForm, self).__init__(user, *args, **kwargs)
+        print self.fields.keyOrder
+    
+    def save(self, commit=True):
+        user = super(ExtendedPasswordChangeForm, self).save(commit=False)
+        if self.cleaned_data.get('renew'):
+            user.renew_token()
+        if commit:
+            user.save()
+        return user
\ No newline at end of file
index 99386a0..69b07bb 100644 (file)
@@ -34,7 +34,7 @@
 from django.conf.urls.defaults import patterns, include, url
 from django.contrib.auth.views import password_change
 
-from astakos.im.forms import ExtendedPasswordResetForm, LoginForm
+from astakos.im.forms import ExtendedPasswordResetForm, ExtendedPasswordChangeForm, LoginForm
 from astakos.im.settings import IM_MODULES, INVITATIONS_ENABLED, EMAILCHANGE_ENABLED
 
 urlpatterns = patterns('astakos.im.views',
@@ -73,7 +73,8 @@ if 'local' in IM_MODULES:
         url(r'^local/reset/confirm/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/?$',
          'password_reset_confirm'),
         url(r'^local/password/reset/complete/?$', 'password_reset_complete'),
-        url(r'^password_change/?$', 'password_change', {'post_change_redirect':'profile'})
+        url(r'^password_change/?$', 'password_change', {'post_change_redirect':'profile',
+            'password_change_form':ExtendedPasswordChangeForm})
     )
 
 if INVITATIONS_ENABLED:
index b2f7763..904b821 100644 (file)
@@ -532,7 +532,9 @@ def approval_terms(request, term_id=None, template_name='im/approval_terms.html'
 
 @signed_terms_required
 def change_password(request):
-    return password_change(request, post_change_redirect=reverse('astakos.im.views.edit_profile'))
+    return password_change(request,
+                            post_change_redirect=reverse('astakos.im.views.edit_profile'),
+                            password_change_form=ExtendedPasswordChangeForm)
 
 @transaction.commit_manually
 def change_email(request, activation_key=None,