Use maybe_fetch() to avoid fuzzier search behavior

This commit is contained in:
smitten 2023-07-24 11:12:29 -04:00
parent 50480e5087
commit 32d0fcd025
Signed by untrusted user: smitten
GPG key ID: 1DDD22F13552A07A

View file

@ -8,6 +8,7 @@ defmodule Pleroma.Web.AkkomaAPI.ProtocolHandlerController do
import Pleroma.Web.ControllerHelper, only: [json_response: 3] import Pleroma.Web.ControllerHelper, only: [json_response: 3]
alias Pleroma.Activity alias Pleroma.Activity
alias Pleroma.Search.DatabaseSearch
alias Pleroma.User alias Pleroma.User
alias Pleroma.Web.Plugs.OAuthScopesPlug alias Pleroma.Web.Plugs.OAuthScopesPlug
@ -38,23 +39,21 @@ defmodule Pleroma.Web.AkkomaAPI.ProtocolHandlerController do
# Should webfinger handles even be accepted? They are not ActivityPub URLs # Should webfinger handles even be accepted? They are not ActivityPub URLs
defp find_and_redirect(conn, "@" <> identifier) do defp find_and_redirect(conn, "@" <> identifier) do
redirect_to_target(User.get_or_fetch(identifier), conn) with {:error, _err} <- User.get_or_fetch(identifier) do
|| conn |> json_response(:not_found, "Not Found - @#{identifier}") conn |> json_response(:not_found, "Not Found - @#{identifier}")
else
{:ok, %User{} = found_user} -> conn |> redirect(to: "/users/#{found_user.id}")
end
end end
defp find_and_redirect(%{assigns: %{user: user}} = conn, identifier) do defp find_and_redirect(%{assigns: %{user: user}} = conn, identifier) do
redirect_to_target(User.get_or_fetch("https://" <> identifier), conn) with {:error, _err} <- User.get_or_fetch("https://" <> identifier),
|| redirect_to_target(Activity.search(user, "https://" <> identifier, [limit: 1]), conn) [] <- DatabaseSearch.maybe_fetch([], user, "https://" <> identifier) do
|| conn |> json_response(:not_found, "Not Found - #{identifier}") conn |> json_response(:not_found, "Not Found - #{identifier}")
end else
{:ok, %User{} = found_user} -> conn |> redirect(to: "/users/#{found_user.id}")
defp redirect_to_target({:error, _err}, _conn), do: nil [%Activity{} = found_activity] -> conn |> redirect(to: "/notice/#{found_activity.id}")
defp redirect_to_target({:ok, found}, conn) do end
conn |> redirect(to: "/users/#{found.id}")
end
defp redirect_to_target([], _conn), do: nil
defp redirect_to_target([%Activity{} = activity], conn) do
conn |> redirect(to: "/notice/#{activity.id}")
end end
end end