zulip/zerver/migrations/0295_case_insensitive_email...

34 lines
1.3 KiB
Python
Raw Normal View History

from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("zerver", "0294_remove_userprofile_pointer"),
]
operations = [
# Zulip has always had case-insensitive matching for email
# addresses on UserProfile objects. But Django's
# unique_together feature only supports case-sensitive
# indexes. So we reply the old unique_together index with a
# new case-insensitive index.
#
# Further, when we created the delivery_email field, we
# neglected to create an unique index on (realm_id,
# delivery_email), which meant race conditions or logic bugs
# could allow duplicate user accounts being created in
# organizations with EMAIL_ADDRESS_VISIBILITY_ADMINS. We
# correct this by adding the appropriate unique index there as
# well.
migrations.RunSQL(
"""
CREATE UNIQUE INDEX zerver_userprofile_realm_id_email_uniq ON zerver_userprofile (realm_id, upper(email::text));
CREATE UNIQUE INDEX zerver_userprofile_realm_id_delivery_email_uniq ON zerver_userprofile (realm_id, upper(delivery_email::text));
"""
),
migrations.AlterUniqueTogether(
name="userprofile",
unique_together=set(),
),
]