Add log/restore for fullnames and passwords.

(imported from commit 048ca3c86b9f077fcbccd5df4a509191a545da4c)
This commit is contained in:
Tim Abbott 2012-10-25 15:39:34 -04:00
parent a798e14d86
commit 7c8bde5d90
3 changed files with 36 additions and 10 deletions

View File

@ -260,7 +260,7 @@ def restore_saved_messages():
if message_type.startswith("subscription"):
old_message["name"] = old_message["name"].lower()
old_message["domain"] = old_message["domain"].lower()
elif message_type == "user_activated":
elif message_type.startswith("user_"):
old_message["user"] = old_message["user"].lower()
else:
old_message["sender_email"] = old_message["sender_email"].lower()
@ -278,7 +278,7 @@ def restore_saved_messages():
if message_type.startswith("subscription"):
stream_set.add((old_message["domain"], old_message["name"]))
continue
elif message_type == "user_activated":
elif message_type.startswith("user_"):
continue
sender_email = old_message["sender_email"]
domain = sender_email.split('@')[1]
@ -377,7 +377,7 @@ def restore_saved_messages():
messages_to_create = []
for idx, old_message in enumerate(old_messages):
if (old_message["type"].startswith("subscription") or
old_message["type"] == "user_activated"):
old_message["type"].startswith("user_")):
continue
message = Message()
@ -460,12 +460,24 @@ def restore_saved_messages():
users[old_message["user"]].id)] = False
continue
elif old_message["type"] == "user_activated":
# Just handle these the slow way
# These are rare, so just handle them the slow way
user = User.objects.get(email=old_message["user"])
do_activate_user(user, log=False)
# Update the cache of users to show this user as activated
users_by_id[user.userprofile.id] = UserProfile.objects.get(user=user)
continue
elif old_message["type"] == "user_change_password":
# Just handle these the slow way
user = User.objects.get(email=old_message["user"])
user.password = old_message["pwhash"]
user.save()
continue
elif old_message["type"] == "user_change_full_name":
# Just handle these the slow way
user_profile = UserProfile.objects.get(user__email=old_message["user"])
user_profile.full_name = old_message["full_name"]
user_profile.save()
continue
message = messages_by_id[current_message_id]
current_message_id += 1

View File

@ -522,6 +522,22 @@ def do_activate_user(user, log=True):
log_event({'type': 'user_activated',
'user': user.email})
def do_change_password(user, password, log=True):
user.set_password(password)
user.save()
if log:
log_event({'type': 'user_change_password',
'user': user.email,
'pwhash': user.password})
def do_change_full_name(user_profile, full_name, log=True):
user_profile.full_name = full_name
user_profile.save()
if log:
log_event({'type': 'user_change_full_name',
'user': user_profile.user.email,
'full_name': full_name})
class Huddle(models.Model):
# TODO: We should consider whether using
# CommaSeparatedIntegerField would be better.

View File

@ -10,7 +10,8 @@ from django.core.exceptions import ValidationError
from django.contrib.auth.views import login as django_login_page
from zephyr.models import Message, UserProfile, Stream, Subscription, \
Recipient, get_display_recipient, get_huddle, Realm, UserMessage, \
do_add_subscription, do_remove_subscription, \
do_add_subscription, do_remove_subscription, do_change_password, \
do_change_full_name, \
create_user, do_send_message, create_user_if_needed, \
create_stream_if_needed, PreregistrationUser, get_client
from zephyr.forms import RegistrationForm, HomepageForm, is_unique
@ -766,16 +767,13 @@ def json_change_settings(request):
return json_error("New password must match confirmation password!")
if not authenticate(username=user_profile.user.email, password=old_password):
return json_error("Wrong password!")
user_profile.user.set_password(new_password)
do_change_password(user_profile.user, new_password)
result = {}
if user_profile.full_name != full_name:
user_profile.full_name = full_name
do_change_full_name(user_profile, full_name)
result['full_name'] = full_name
user_profile.user.save()
user_profile.save()
return json_success(result)
@login_required_json_view