src/cm/views/site.py
changeset 220 7d278fde2748
parent 164 cc217bd00476
child 225 67e1a89d6bca
--- a/src/cm/views/site.py	Thu Mar 18 15:18:42 2010 +0100
+++ b/src/cm/views/site.py	Fri Mar 19 16:22:59 2010 +0100
@@ -19,6 +19,7 @@
 from django.template.loader import render_to_string
 from django.utils.translation import get_language, ugettext as _, ugettext_lazy
 from django.views.generic.list_detail import object_list
+from django.contrib.auth.models import User
 from cm.models import Text, TextVersion, Attachment, Comment, Configuration, Activity
 
 ACTIVITY_PAGINATION = 10
@@ -247,6 +248,62 @@
     
     return render_to_response('site/settings_design.html', {'form' : form}, context_instance=RequestContext(request))
     
+class ForgotPWForm(forms.Form):
+    name_or_email = forms.CharField(label=ugettext_lazy("Username or email"),
+                                     required=True,
+                                     )
+     
+def forgot_pw(request):
+    if request.method == 'POST':
+        form = ForgotPWForm(data=request.POST)
+        if form.is_valid() :
+            name_or_email = form.cleaned_data.get("name_or_email")
+            # try email
+            user = None
+            try:
+                user = User.objects.get(email__iexact = name_or_email)
+            except User.DoesNotExist:
+                pass
+                # try email
+                try:
+                    user = User.objects.get(username__exact = name_or_email)
+                except User.DoesNotExist:
+                    pass
+            if user:
+                message = render_to_string('email/forgot_pw.txt',
+                                           { 
+                                             'reset_url' : reverse('reset-pw', args=[user.get_profile().adminkey]),
+                                             'CONF': Configuration.objects
+                                              })
+            
+                send_mail(_(u'How to reset your password'), message, Configuration.objects['email_from'], [user.email])
+                
+                display_message(request, _(u'A link to reset your password has been sent to the profile email. Please check your email.'))
+            else:
+                display_message(request, _(u'No user found.'))
+            return HttpResponseRedirect(reverse('index'))
+    else:
+        form = ForgotPWForm()
+    
+    return render_to_response('site/forgot_pw.html', {'form' : form}, context_instance=RequestContext(request))
+
+from django.contrib.auth.forms import SetPasswordForm
+
+def reset_pw(request, adminkey):
+    try:
+        profile = UserProfile.objects.get(adminkey=adminkey)
+        if request.method == 'POST':
+            form = SetPasswordForm(profile.user,data=request.POST)
+            if form.is_valid():
+                form.save()
+                display_message(request, _(u'Your password has been changed.'))
+                return HttpResponseRedirect(reverse('index'))                
+        else:
+            form = SetPasswordForm(profile.user)
+        return render_to_response('site/reset_pw.html', {'form' : form}, context_instance=RequestContext(request))
+    except UserProfile.DoesNotExist:
+        from django.http import Http404
+
 def help(request):
     return render_to_response('site/help.html', context_instance=RequestContext(request))