X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Factivity_pub%2Factivity_pub.ex;h=d171913f81e11ff440e3391af76fb6fd19ec33fd;hb=6046f10431390fa2ecef4b8d8a95b5d8db03fd2d;hp=7c9ddcfe750de84bd604d218e7d2b17c31e9d6a3;hpb=5e36b750c1f98c440f4edcb9bb5bac5e6f93278f;p=akkoma diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 7c9ddcfe7..d171913f8 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1,6 +1,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do alias Pleroma.{Activity, Repo, Object, Upload, User, Notification} alias Pleroma.Web.ActivityPub.Transmogrifier + alias Pleroma.Web.WebFinger import Ecto.Query import Pleroma.Web.ActivityPub.Utils require Logger @@ -253,6 +254,12 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do end end + def make_user_from_nickname(nickname) do + with {:ok, %{"ap_id" => ap_id}} when not is_nil(ap_id) <- WebFinger.finger(nickname) do + make_user_from_ap_id(ap_id) + end + end + def publish(actor, activity) do {:ok, followers} = User.get_followers(actor) @@ -273,6 +280,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do end end + # TODO: + # This will create a Create activity, which we need internally at the moment. def fetch_object_from_id(id) do if object = Object.get_cached_by_ap_id(id) do {:ok, object} @@ -280,8 +289,13 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do with {:ok, %{body: body, status_code: code}} when code in 200..299 <- @httpoison.get(id, [Accept: "application/activity+json"], follow_redirect: true, timeout: 10000, recv_timeout: 20000), {:ok, data} <- Poison.decode(body), data <- Transmogrifier.fix_object(data), - %User{} <- User.get_or_fetch_by_ap_id(data["attributedTo"]) do - Object.create(data) + nil <- Object.get_by_ap_id(data["id"]), + %User{} = user <- User.get_or_fetch_by_ap_id(data["attributedTo"]), + {:ok, activity} = create(%{to: data["to"], actor: user, context: data["context"], object: data, local: false, additional: %{"cc" => data["cc"]}}) do + {:ok, Object.get_by_ap_id(activity.data["object"]["id"])} + else + object = %Object{} -> {:ok, object} + e -> e end end end