Add banner image to user json.
[akkoma] / lib / pleroma / web / activity_pub / activity_pub.ex
index 554d3a00800b151349743b617cc9eaf7e34c2170..d593460422121c3f42b0ced632157c476799e3c1 100644 (file)
@@ -260,25 +260,45 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
     Repo.insert(%Object{data: data})
   end
 
-  def make_user_from_ap_id(ap_id) do
+  def fetch_and_prepare_user_from_ap_id(ap_id) do
     with {:ok, %{status_code: 200, body: body}} <- @httpoison.get(ap_id, ["Accept": "application/activity+json"]),
     {:ok, data} <- Poison.decode(body)
       do
+      avatar = %{
+        "type" => "Image",
+        "url" => [%{"href" => data["icon"]["url"]}]
+      }
+
+      banner = %{
+        "type" => "Image",
+        "url" => [%{"href" => data["image"]["url"]}]
+      }
+
       user_data = %{
         ap_id: data["id"],
         info: %{
           "ap_enabled" => true,
-          "source_data" => data
+          "source_data" => data,
+          "banner" => banner
         },
+        avatar: avatar,
         nickname: "#{data["preferredUsername"]}@#{URI.parse(ap_id).host}",
-        name: data["name"]
+        name: data["name"],
+        follower_address: data["followers"],
       }
 
-      if user = User.get_by_ap_id(ap_id) do
-        User.info_changeset(user, user_data)
-        |> Repo.update
+      {:ok, user_data}
+    end
+  end
+
+  def make_user_from_ap_id(ap_id) do
+    if user = User.get_by_ap_id(ap_id) do
+      Transmogrifier.upgrade_user_from_ap_id(ap_id)
+    else
+      with {:ok, data} <- fetch_and_prepare_user_from_ap_id(ap_id) do
+        User.insert_or_update_user(data)
       else
-        User.insert_or_update_user(user_data)
+        e -> e
       end
     end
   end