summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlain <lain@soykaf.club>2018-02-18 12:27:05 +0100
committerlain <lain@soykaf.club>2018-02-18 12:27:05 +0100
commitb99eeb2bdf9224727b8acb2db596d1b851550e55 (patch)
tree9777c002ef647051a4b0e71598a190d92145323a
parent68752b20475162705837421e446166892421cf21 (diff)
downloadpleroma-b99eeb2bdf9224727b8acb2db596d1b851550e55.tar.gz
pleroma-b99eeb2bdf9224727b8acb2db596d1b851550e55.zip
Try to fetch AP user data first.
-rw-r--r--lib/pleroma/user.ex11
-rw-r--r--lib/pleroma/web/activity_pub/activity_pub.ex7
-rw-r--r--lib/pleroma/web/web_finger/web_finger.ex4
3 files changed, 20 insertions, 2 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index 2ca4d406b..f88c1240a 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -228,12 +228,21 @@ defmodule Pleroma.User do
Cachex.get!(:user_cache, key, fallback: fn(_) -> user_info(user) end)
end
+ def fetch_by_nickname(nickname) do
+ ap_try = ActivityPub.make_user_from_nickname(nickname)
+
+ case ap_try do
+ {:ok, user} -> {:ok, user}
+ _ -> OStatus.make_user(nickname)
+ end
+ end
+
def get_or_fetch_by_nickname(nickname) do
with %User{} = user <- get_by_nickname(nickname) do
user
else _e ->
with [_nick, _domain] <- String.split(nickname, "@"),
- {:ok, user} <- OStatus.make_user(nickname) do
+ {:ok, user} <- fetch_by_nickname(nickname) do
user
else _e -> nil
end
diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex
index a5e8b98e9..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)
diff --git a/lib/pleroma/web/web_finger/web_finger.ex b/lib/pleroma/web/web_finger/web_finger.ex
index 09957e133..54cbf4cea 100644
--- a/lib/pleroma/web/web_finger/web_finger.ex
+++ b/lib/pleroma/web/web_finger/web_finger.ex
@@ -71,12 +71,14 @@ defmodule Pleroma.Web.WebFinger do
subject = XML.string_from_xpath("//Subject", doc)
salmon = XML.string_from_xpath(~s{//Link[@rel="salmon"]/@href}, doc)
subscribe_address = XML.string_from_xpath(~s{//Link[@rel="http://ostatus.org/schema/1.0/subscribe"]/@template}, doc)
+ ap_id = XML.string_from_xpath(~s{//Link[@rel="self" and @type="application/activity+json"]/@href}, doc)
data = %{
"magic_key" => magic_key,
"topic" => topic,
"subject" => subject,
"salmon" => salmon,
- "subscribe_address" => subscribe_address
+ "subscribe_address" => subscribe_address,
+ "ap_id" => ap_id
}
{:ok, data}
end