- defp key_id_to_actor_id(key_id) do
- URI.parse(key_id)
- |> Map.put(:fragment, nil)
- |> URI.to_string()
+ @known_suffixes ["/publickey", "/main-key"]
+
+ def key_id_to_actor_id(key_id) do
+ uri =
+ key_id
+ |> URI.parse()
+ |> Map.put(:fragment, nil)
+ |> remove_suffix(@known_suffixes)
+
+ maybe_ap_id = URI.to_string(uri)
+
+ case ObjectValidators.ObjectID.cast(maybe_ap_id) do
+ {:ok, ap_id} ->
+ {:ok, ap_id}
+
+ _ ->
+ case Pleroma.Web.WebFinger.finger(maybe_ap_id) do
+ {:ok, %{"ap_id" => ap_id}} -> {:ok, ap_id}
+ _ -> {:error, maybe_ap_id}
+ end
+ end