diff --git a/lib/hawat/migrations/versions/426e6e986b40_user_lowercase.py b/lib/hawat/migrations/versions/426e6e986b40_user_lowercase.py
new file mode 100644
index 0000000000000000000000000000000000000000..5e7508c7e6f7551d62d794d666ddfd584033d698
--- /dev/null
+++ b/lib/hawat/migrations/versions/426e6e986b40_user_lowercase.py
@@ -0,0 +1,35 @@
+"""User lowercase
+
+Revision ID: 426e6e986b40
+Revises: 878a5655f9a8
+Create Date: 2022-06-20 11:42:04.329244
+
+"""
+from alembic import op
+import sqlalchemy as sa
+
+
+# revision identifiers, used by Alembic.
+revision = '426e6e986b40'
+down_revision = '878a5655f9a8'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+    op.execute(
+        "UPDATE users SET email = lower(email) WHERE email <> lower(email)"
+    )
+    # Add a random number and '_CONFLICT_CASE' string as a suffix to logins which
+    # are not in lowercase and are not unique when in lowercase and disable users
+    # with such logins.
+    op.execute(
+        "UPDATE users u1 SET login = concat(u1.login, '_', floor(random() * 10000 + 1), '_CONFLICT_CASE'), enabled = FALSE FROM (SELECT lower(login) login FROM users GROUP BY lower(login) HAVING count(*) > 1) u2 WHERE lower(u1.login) = u2.login"
+    )
+    op.execute(
+        "UPDATE users SET login = lower(login) WHERE login <> lower(login)"
+    )
+
+
+def downgrade():
+    pass