From 47684c2a2c44186b0b7eac3002582875efa6855b Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Mon, 22 May 2017 18:10:50 +0200
Subject: [PATCH] Make email and nickname case insensitive.

---
 .../20170522160642_case_insensivtivity.exs    | 19 +++++++++++++++++++
 test/user_test.exs                            |  7 +++++++
 2 files changed, 26 insertions(+)
 create mode 100644 priv/repo/migrations/20170522160642_case_insensivtivity.exs

diff --git a/priv/repo/migrations/20170522160642_case_insensivtivity.exs b/priv/repo/migrations/20170522160642_case_insensivtivity.exs
new file mode 100644
index 000000000..c7565946e
--- /dev/null
+++ b/priv/repo/migrations/20170522160642_case_insensivtivity.exs
@@ -0,0 +1,19 @@
+defmodule Pleroma.Repo.Migrations.CaseInsensivtivity do
+  use Ecto.Migration
+
+  def up do
+    execute ("create extension if not exists citext")
+    alter table(:users) do
+      modify :email, :citext
+      modify :nickname, :citext
+    end
+  end
+
+  def down do
+    alter table(:users) do
+      modify :email, :string
+      modify :nickname, :string
+    end
+    execute ("drop extension if exists citext")
+  end
+end
diff --git a/test/user_test.exs b/test/user_test.exs
index b87d31862..6a7ecca27 100644
--- a/test/user_test.exs
+++ b/test/user_test.exs
@@ -114,6 +114,13 @@ defmodule Pleroma.UserTest do
       assert user == fetched_user
     end
 
+    test "gets an existing user, case insensitive" do
+      user = insert(:user, nickname: "nick")
+      fetched_user = User.get_or_fetch_by_nickname("NICK")
+
+      assert user == fetched_user
+    end
+
     test "fetches an external user via ostatus if no user exists" do
       fetched_user = User.get_or_fetch_by_nickname("shp@social.heldscal.la")
       assert fetched_user.nickname == "shp@social.heldscal.la"