From 7c8bde5d9028c2fc66ea1e94cec47c6f9e194a97 Mon Sep 17 00:00:00 2001 From: Tim Abbott Date: Thu, 25 Oct 2012 15:39:34 -0400 Subject: [PATCH] Add log/restore for fullnames and passwords. (imported from commit 048ca3c86b9f077fcbccd5df4a509191a545da4c) --- zephyr/management/commands/populate_db.py | 20 ++++++++++++++++---- zephyr/models.py | 16 ++++++++++++++++ zephyr/views.py | 10 ++++------ 3 files changed, 36 insertions(+), 10 deletions(-) diff --git a/zephyr/management/commands/populate_db.py b/zephyr/management/commands/populate_db.py index 79d72577d2..80094e8ae2 100644 --- a/zephyr/management/commands/populate_db.py +++ b/zephyr/management/commands/populate_db.py @@ -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 diff --git a/zephyr/models.py b/zephyr/models.py index d4b83dc924..df5238cf6a 100644 --- a/zephyr/models.py +++ b/zephyr/models.py @@ -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. diff --git a/zephyr/views.py b/zephyr/views.py index 36c1e80bdf..9cda9c969f 100644 --- a/zephyr/views.py +++ b/zephyr/views.py @@ -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