Dot-Notation for Users.verification_key
[mediagoblin.git] / mediagoblin / auth / views.py
index fdc5aec8428e14ea31771ac7595c7cb294dbbacf..d7e8d1bf7cf91239f510aa4204c48145713b0232 100644 (file)
@@ -21,8 +21,8 @@ from webob import exc
 
 from mediagoblin import messages
 from mediagoblin import mg_globals
-from mediagoblin.util import render_to_response, redirect, render_404, setup_user_in_request
-from mediagoblin.util import pass_to_ugettext as _
+from mediagoblin.tools.response import render_to_response, redirect, render_404
+from mediagoblin.tools.translate import pass_to_ugettext as _
 from mediagoblin.db.util import ObjectId, InvalidId
 from mediagoblin.auth import lib as auth_lib
 from mediagoblin.auth import forms as auth_forms
@@ -74,20 +74,20 @@ def register(request):
             extra_validation_passes = False
         if users_with_email:
             register_form.email.errors.append(
-                _(u'Sorry, that email address has already been taken.'))
+                _(u'Sorry, a user with that email address already exists.'))
             extra_validation_passes = False
 
         if extra_validation_passes:
             # Create the user
             user = request.db.User()
-            user['username'] = username
-            user['email'] = email
-            user['pw_hash'] = auth_lib.bcrypt_gen_password_hash(
+            user.username = username
+            user.email = email
+            user.pw_hash = auth_lib.bcrypt_gen_password_hash(
                 request.POST['password'])
             user.save(validate=True)
 
             # log the user in
-            request.session['user_id'] = unicode(user['_id'])
+            request.session['user_id'] = unicode(user._id)
             request.session.save()
 
             # send verification email
@@ -98,7 +98,7 @@ def register(request):
             # message waiting for them to verify their email
             return redirect(
                 request, 'mediagoblin.user_pages.user_home',
-                user=user['username'])
+                user=user.username)
 
     return render_to_response(
         request,
@@ -122,7 +122,7 @@ def login(request):
 
         if user and user.check_login(request.POST['password']):
             # set up login in session
-            request.session['user_id'] = unicode(user['_id'])
+            request.session['user_id'] = unicode(user._id)
             request.session.save()
 
             if request.POST.get('next'):
@@ -160,16 +160,16 @@ def verify_email(request):
     you are lucky :)
     """
     # If we don't have userid and token parameters, we can't do anything; 404
-    if not request.GET.has_key('userid') or not request.GET.has_key('token'):
+    if not 'userid' in request.GET or not 'token' in request.GET:
         return render_404(request)
 
     user = request.db.User.find_one(
         {'_id': ObjectId(unicode(request.GET['userid']))})
 
-    if user and user['verification_key'] == unicode(request.GET['token']):
-        user[u'status'] = u'active'
-        user[u'email_verified'] = True
-        user[u'verification_key'] = None
+    if user and user.verification_key == unicode(request.GET['token']):
+        user.status = u'active'
+        user.email_verified = True
+        user.verification_key = None
 
         user.save()
 
@@ -186,7 +186,7 @@ def verify_email(request):
 
     return redirect(
         request, 'mediagoblin.user_pages.user_home',
-        user=user['username'])
+        user=user.username)
 
 
 def resend_activation(request):
@@ -202,9 +202,17 @@ def resend_activation(request):
             messages.ERROR,
             _('You must be logged in so we know who to send the email to!'))
         
-        return redirect(request, "/auth/login")
+        return redirect(request, 'mediagoblin.auth.login')
 
-    request.user[u'verification_key'] = unicode(uuid.uuid4())
+    if request.user["email_verified"]:
+        messages.add_message(
+            request,
+            messages.ERROR,
+            _("You've already verified your email address!"))
+        
+        return redirect(request, "mediagoblin.user_pages.user_home", user=request.user['username'])
+
+    request.user.verification_key = unicode(uuid.uuid4())
     request.user.save()
     
     email_debug_message(request)
@@ -216,7 +224,7 @@ def resend_activation(request):
         _('Resent your verification email.'))
     return redirect(
         request, 'mediagoblin.user_pages.user_home',
-        user=request.user['username'])
+        user=request.user.username)
 
 
 def forgot_password(request):
@@ -241,7 +249,7 @@ def forgot_password(request):
                 {'email': request.POST['username']})
 
         if user:
-            if user['email_verified'] and user['status'] == 'active':
+            if user.email_verified and user.status == 'active':
                 user[u'fp_verification_key'] = unicode(uuid.uuid4())
                 user[u'fp_token_expire'] = datetime.datetime.now() + \
                                           datetime.timedelta(days=10)
@@ -260,10 +268,9 @@ def forgot_password(request):
 
                 return redirect(
                     request, 'mediagoblin.user_pages.user_home',
-                    user=user['username'])
-
+                    user=user.username)
 
-        # do not reveal whether or not there is a matching user, just move along
+        # do not reveal whether or not there is a matching user
         return redirect(request, 'mediagoblin.auth.fp_email_sent')
 
     return render_to_response(
@@ -297,12 +304,12 @@ def verify_forgot_password(request):
     if ((user and user['fp_verification_key'] and
          user['fp_verification_key'] == unicode(formdata_token) and
          datetime.datetime.now() < user['fp_token_expire']
-         and user['email_verified'] and user['status'] == 'active')):
+         and user.email_verified and user.status == 'active')):
 
         cp_form = auth_forms.ChangePassForm(formdata_vars)
 
         if request.method == 'POST' and cp_form.validate():
-            user[u'pw_hash'] = auth_lib.bcrypt_gen_password_hash(
+            user.pw_hash = auth_lib.bcrypt_gen_password_hash(
                 request.POST['password'])
             user[u'fp_verification_key'] = None
             user[u'fp_token_expire'] = None
@@ -337,6 +344,6 @@ def _process_for_token(request):
     formdata = {
         'vars': formdata_vars,
         'has_userid_and_token':
-            formdata_vars.has_key('userid') and formdata_vars.has_key('token')}
+            'userid' in formdata_vars and 'token' in formdata_vars}
 
     return formdata