Merge branch 'chore/pleroma-vcl' into 'develop'
authorfeld <feld@feld.me>
Wed, 30 Sep 2020 18:13:34 +0000 (18:13 +0000)
committerfeld <feld@feld.me>
Wed, 30 Sep 2020 18:13:34 +0000 (18:13 +0000)
Make it possible for Varnish logs to contain the true scheme used by clients

See merge request pleroma/pleroma!3051

lib/pleroma/user.ex
lib/pleroma/user/search.ex
priv/repo/migrations/20200928145912_revert_citext_change.exs
priv/repo/migrations/20200930082320_user_ur_is_index_part_three.exs [new file with mode: 0644]
test/user_search_test.exs

index 71ace1c34a51afc3ed93c22fd1e7e9b6126296ad..09ea8079391b6b8c7c882ee7d19778e58c1bce42 100644 (file)
@@ -2291,7 +2291,9 @@ defmodule Pleroma.User do
 
     # if pinned activity was scheduled for deletion, we reschedule it for deletion
     if data["expires_at"] do
-      {:ok, expires_at, _} = DateTime.from_iso8601(data["expires_at"])
+      # MRF.ActivityExpirationPolicy used UTC timestamps for expires_at in original implementation
+      {:ok, expires_at} =
+        data["expires_at"] |> Pleroma.EctoType.ActivityPub.ObjectValidators.DateTime.cast()
 
       Pleroma.Workers.PurgeExpiredActivity.enqueue(%{
         activity_id: id,
index 03f2c552f2f29b82cf20909d2d830ea284f1dc85..35a828008ceb34e6b6653b34d47df68b65c54d53 100644 (file)
@@ -54,8 +54,9 @@ defmodule Pleroma.User.Search do
 
   defp maybe_add_uri_match(list, query) do
     with {:ok, query} <- UriType.cast(query),
-         %User{} = user <- Pleroma.Repo.get_by(User, uri: query) do
-      [user.id | list]
+         q = from(u in User, where: u.uri == ^query, select: u.id),
+         users = Pleroma.Repo.all(q) do
+      users ++ list
     else
       _ -> list
     end
index ab232f6070dd9c693bdf70b9be48162336a38d99..685a98533438d85a46e3a8653c3059bd169e1941 100644 (file)
@@ -6,6 +6,6 @@ defmodule Pleroma.Repo.Migrations.RevertCitextChange do
       modify(:uri, :text)
     end
 
-    create_if_not_exists(unique_index(:users, :uri))
+    create_if_not_exists(unique_index(:users, :uri))
   end
 end
diff --git a/priv/repo/migrations/20200930082320_user_ur_is_index_part_three.exs b/priv/repo/migrations/20200930082320_user_ur_is_index_part_three.exs
new file mode 100644 (file)
index 0000000..816c652
--- /dev/null
@@ -0,0 +1,8 @@
+defmodule Pleroma.Repo.Migrations.UserURIsIndexPartThree do
+  use Ecto.Migration
+
+  def change do
+    drop_if_exists(unique_index(:users, :uri))
+    create_if_not_exists(index(:users, :uri))
+  end
+end
index cc14e97415547bb1bbffbb58c263473e712dbf89..c4b8050055b04c167ed4e0afeacd65c1f40feb67 100644 (file)
@@ -36,6 +36,12 @@ defmodule Pleroma.UserSearchTest do
       assert first_user.id == user.id
     end
 
+    test "doesn't die if two users have the same uri" do
+      insert(:user, %{uri: "https://gensokyo.2hu/@raymoo"})
+      insert(:user, %{uri: "https://gensokyo.2hu/@raymoo"})
+      assert [_first_user, _second_user] = User.search("https://gensokyo.2hu/@raymoo")
+    end
+
     test "returns a user with matching uri as the first result" do
       user =
         insert(:user, %{