mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 14:03:30 +00:00
Terms of Service: Fix corner cases around new users being created.
This fixes a few bugs in 7910a6e134,
related to automatically created user accounts.
This commit is contained in:
@@ -277,12 +277,12 @@ def notify_created_bot(user_profile):
|
|||||||
send_event(event, bot_owner_userids(user_profile))
|
send_event(event, bot_owner_userids(user_profile))
|
||||||
|
|
||||||
def do_create_user(email, password, realm, full_name, short_name,
|
def do_create_user(email, password, realm, full_name, short_name,
|
||||||
active=True, bot_type=None, bot_owner=None,
|
active=True, bot_type=None, bot_owner=None, tos_version=None,
|
||||||
avatar_source=UserProfile.AVATAR_FROM_GRAVATAR,
|
avatar_source=UserProfile.AVATAR_FROM_GRAVATAR,
|
||||||
default_sending_stream=None, default_events_register_stream=None,
|
default_sending_stream=None, default_events_register_stream=None,
|
||||||
default_all_public_streams=None, prereg_user=None,
|
default_all_public_streams=None, prereg_user=None,
|
||||||
newsletter_data=None):
|
newsletter_data=None):
|
||||||
# type: (text_type, text_type, Realm, text_type, text_type, bool, Optional[int], Optional[UserProfile], text_type, Optional[Stream], Optional[Stream], bool, Optional[PreregistrationUser], Optional[Dict[str, str]]) -> UserProfile
|
# type: (text_type, text_type, Realm, text_type, text_type, bool, Optional[int], Optional[UserProfile], Optional[text_type], text_type, Optional[Stream], Optional[Stream], bool, Optional[PreregistrationUser], Optional[Dict[str, str]]) -> UserProfile
|
||||||
event = {'type': 'user_created',
|
event = {'type': 'user_created',
|
||||||
'timestamp': time.time(),
|
'timestamp': time.time(),
|
||||||
'full_name': full_name,
|
'full_name': full_name,
|
||||||
@@ -297,7 +297,7 @@ def do_create_user(email, password, realm, full_name, short_name,
|
|||||||
user_profile = create_user(email=email, password=password, realm=realm,
|
user_profile = create_user(email=email, password=password, realm=realm,
|
||||||
full_name=full_name, short_name=short_name,
|
full_name=full_name, short_name=short_name,
|
||||||
active=active, bot_type=bot_type, bot_owner=bot_owner,
|
active=active, bot_type=bot_type, bot_owner=bot_owner,
|
||||||
avatar_source=avatar_source,
|
tos_version=tos_version, avatar_source=avatar_source,
|
||||||
default_sending_stream=default_sending_stream,
|
default_sending_stream=default_sending_stream,
|
||||||
default_events_register_stream=default_events_register_stream,
|
default_events_register_stream=default_events_register_stream,
|
||||||
default_all_public_streams=default_all_public_streams)
|
default_all_public_streams=default_all_public_streams)
|
||||||
@@ -1579,8 +1579,9 @@ def do_activate_user(user_profile, log=True, join_date=timezone.now()):
|
|||||||
user_profile.is_mirror_dummy = False
|
user_profile.is_mirror_dummy = False
|
||||||
user_profile.set_unusable_password()
|
user_profile.set_unusable_password()
|
||||||
user_profile.date_joined = join_date
|
user_profile.date_joined = join_date
|
||||||
|
user_profile.tos_version = settings.TOS_VERSION
|
||||||
user_profile.save(update_fields=["is_active", "date_joined", "password",
|
user_profile.save(update_fields=["is_active", "date_joined", "password",
|
||||||
"is_mirror_dummy"])
|
"is_mirror_dummy", "tos_version"])
|
||||||
|
|
||||||
if log:
|
if log:
|
||||||
domain = user_profile.realm.domain
|
domain = user_profile.realm.domain
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ def bulk_create_realms(realm_list):
|
|||||||
existing_realms.add(domain)
|
existing_realms.add(domain)
|
||||||
Realm.objects.bulk_create(realms_to_create)
|
Realm.objects.bulk_create(realms_to_create)
|
||||||
|
|
||||||
def bulk_create_users(realms, users_raw, bot_type=None):
|
def bulk_create_users(realms, users_raw, bot_type=None, tos_version=None):
|
||||||
# type: (Mapping[text_type, Realm], Set[Tuple[text_type, text_type, text_type, bool]], Optional[int]) -> None
|
# type: (Mapping[text_type, Realm], Set[Tuple[text_type, text_type, text_type, bool]], Optional[int], Optional[text_type]) -> None
|
||||||
"""
|
"""
|
||||||
Creates and saves a UserProfile with the given email.
|
Creates and saves a UserProfile with the given email.
|
||||||
Has some code based off of UserManage.create_user, but doesn't .save()
|
Has some code based off of UserManage.create_user, but doesn't .save()
|
||||||
@@ -39,7 +39,7 @@ def bulk_create_users(realms, users_raw, bot_type=None):
|
|||||||
domain = resolve_email_to_domain(email)
|
domain = resolve_email_to_domain(email)
|
||||||
profile = create_user_profile(realms[domain], email,
|
profile = create_user_profile(realms[domain], email,
|
||||||
initial_password(email), active, bot_type,
|
initial_password(email), active, bot_type,
|
||||||
full_name, short_name, None, False)
|
full_name, short_name, None, False, tos_version)
|
||||||
profiles_to_create.append(profile)
|
profiles_to_create.append(profile)
|
||||||
UserProfile.objects.bulk_create(profiles_to_create)
|
UserProfile.objects.bulk_create(profiles_to_create)
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ def random_api_key():
|
|||||||
# create_user (below) which will also make the Subscription and
|
# create_user (below) which will also make the Subscription and
|
||||||
# Recipient objects
|
# Recipient objects
|
||||||
def create_user_profile(realm, email, password, active, bot_type, full_name,
|
def create_user_profile(realm, email, password, active, bot_type, full_name,
|
||||||
short_name, bot_owner, is_mirror_dummy):
|
short_name, bot_owner, is_mirror_dummy, tos_version):
|
||||||
# type: (Realm, text_type, text_type, bool, Optional[int], text_type, text_type, Optional[UserProfile], bool) -> UserProfile
|
# type: (Realm, text_type, text_type, bool, Optional[int], text_type, text_type, Optional[UserProfile], bool, Optional[text_type]) -> UserProfile
|
||||||
now = timezone.now()
|
now = timezone.now()
|
||||||
email = UserManager.normalize_email(email)
|
email = UserManager.normalize_email(email)
|
||||||
|
|
||||||
@@ -38,6 +38,7 @@ def create_user_profile(realm, email, password, active, bot_type, full_name,
|
|||||||
last_login=now, date_joined=now, realm=realm,
|
last_login=now, date_joined=now, realm=realm,
|
||||||
pointer=-1, is_bot=bool(bot_type), bot_type=bot_type,
|
pointer=-1, is_bot=bool(bot_type), bot_type=bot_type,
|
||||||
is_mirror_dummy=is_mirror_dummy,
|
is_mirror_dummy=is_mirror_dummy,
|
||||||
|
tos_version=tos_version,
|
||||||
enable_stream_desktop_notifications=enable_stream_desktop_notifications,
|
enable_stream_desktop_notifications=enable_stream_desktop_notifications,
|
||||||
onboarding_steps=ujson.dumps([]),
|
onboarding_steps=ujson.dumps([]),
|
||||||
default_language=realm.default_language)
|
default_language=realm.default_language)
|
||||||
@@ -54,15 +55,15 @@ def create_user_profile(realm, email, password, active, bot_type, full_name,
|
|||||||
return user_profile
|
return user_profile
|
||||||
|
|
||||||
def create_user(email, password, realm, full_name, short_name,
|
def create_user(email, password, realm, full_name, short_name,
|
||||||
active=True, bot_type=None, bot_owner=None,
|
active=True, bot_type=None, bot_owner=None, tos_version=None,
|
||||||
avatar_source=UserProfile.AVATAR_FROM_GRAVATAR,
|
avatar_source=UserProfile.AVATAR_FROM_GRAVATAR,
|
||||||
is_mirror_dummy=False, default_sending_stream=None,
|
is_mirror_dummy=False, default_sending_stream=None,
|
||||||
default_events_register_stream=None,
|
default_events_register_stream=None,
|
||||||
default_all_public_streams=None, user_profile_id=None):
|
default_all_public_streams=None, user_profile_id=None):
|
||||||
# type: (text_type, text_type, Realm, text_type, text_type, bool, Optional[int], Optional[UserProfile], text_type, bool, Optional[Stream], Optional[Stream], Optional[bool], Optional[int]) -> UserProfile
|
# type: (text_type, text_type, Realm, text_type, text_type, bool, Optional[int], Optional[UserProfile], Optional[text_type], text_type, bool, Optional[Stream], Optional[Stream], Optional[bool], Optional[int]) -> UserProfile
|
||||||
user_profile = create_user_profile(realm, email, password, active, bot_type,
|
user_profile = create_user_profile(realm, email, password, active, bot_type,
|
||||||
full_name, short_name, bot_owner,
|
full_name, short_name, bot_owner,
|
||||||
is_mirror_dummy)
|
is_mirror_dummy, tos_version)
|
||||||
user_profile.avatar_source = avatar_source
|
user_profile.avatar_source = avatar_source
|
||||||
user_profile.default_sending_stream = default_sending_stream
|
user_profile.default_sending_stream = default_sending_stream
|
||||||
user_profile.default_events_register_stream = default_events_register_stream
|
user_profile.default_events_register_stream = default_events_register_stream
|
||||||
|
|||||||
@@ -14,6 +14,6 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='userprofile',
|
model_name='userprofile',
|
||||||
name='tos_version',
|
name='tos_version',
|
||||||
field=models.CharField(default=None, max_length=10, null=True),
|
field=models.CharField(max_length=10, null=True),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -391,7 +391,7 @@ class UserProfile(ModelReprMixin, AbstractBaseUser, PermissionsMixin):
|
|||||||
last_pointer_updater = models.CharField(max_length=64) # type: text_type
|
last_pointer_updater = models.CharField(max_length=64) # type: text_type
|
||||||
realm = models.ForeignKey(Realm) # type: Realm
|
realm = models.ForeignKey(Realm) # type: Realm
|
||||||
api_key = models.CharField(max_length=32) # type: text_type
|
api_key = models.CharField(max_length=32) # type: text_type
|
||||||
tos_version = models.CharField(null=True, max_length=10, default=settings.TOS_VERSION) # type: text_type
|
tos_version = models.CharField(null=True, max_length=10) # type: text_type
|
||||||
|
|
||||||
### Notifications settings. ###
|
### Notifications settings. ###
|
||||||
|
|
||||||
|
|||||||
@@ -224,7 +224,6 @@ def accounts_register(request):
|
|||||||
user_profile = do_create_user(email, password, realm, full_name, short_name,
|
user_profile = do_create_user(email, password, realm, full_name, short_name,
|
||||||
prereg_user=prereg_user,
|
prereg_user=prereg_user,
|
||||||
newsletter_data={"IP": request.META['REMOTE_ADDR']})
|
newsletter_data={"IP": request.META['REMOTE_ADDR']})
|
||||||
do_change_tos_version(user_profile, settings.TOS_VERSION)
|
|
||||||
|
|
||||||
# This logs you in using the ZulipDummyBackend, since honestly nothing
|
# This logs you in using the ZulipDummyBackend, since honestly nothing
|
||||||
# more fancy than this is required.
|
# more fancy than this is required.
|
||||||
|
|||||||
@@ -42,7 +42,8 @@ def create_users(realms, name_list, bot_type=None):
|
|||||||
for full_name, email in name_list:
|
for full_name, email in name_list:
|
||||||
short_name = email_to_username(email)
|
short_name = email_to_username(email)
|
||||||
user_set.add((email, full_name, short_name, True))
|
user_set.add((email, full_name, short_name, True))
|
||||||
bulk_create_users(realms, user_set, bot_type)
|
tos_version = settings.TOS_VERSION if bot_type is None else None
|
||||||
|
bulk_create_users(realms, user_set, bot_type=bot_type, tos_version=tos_version)
|
||||||
|
|
||||||
def create_streams(realms, realm, stream_list):
|
def create_streams(realms, realm, stream_list):
|
||||||
# type: (Mapping[text_type, Realm], Realm, Iterable[text_type]) -> None
|
# type: (Mapping[text_type, Realm], Realm, Iterable[text_type]) -> None
|
||||||
@@ -428,7 +429,7 @@ def restore_saved_messages():
|
|||||||
streams[recipient.type_id].name.lower())] = recipient
|
streams[recipient.type_id].name.lower())] = recipient
|
||||||
|
|
||||||
print(datetime.datetime.now(), "Creating users...")
|
print(datetime.datetime.now(), "Creating users...")
|
||||||
bulk_create_users(realms, user_set)
|
bulk_create_users(realms, user_set, tos_version=settings.TOS_VERSION)
|
||||||
|
|
||||||
users = {} # type: Dict[text_type, UserProfile]
|
users = {} # type: Dict[text_type, UserProfile]
|
||||||
users_by_id = {} # type: Dict[int, UserProfile]
|
users_by_id = {} # type: Dict[int, UserProfile]
|
||||||
|
|||||||
Reference in New Issue
Block a user