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(), ), ]