Basic AP user building.
[akkoma] / lib / pleroma / user.ex
index 09bcf0cb494d5b75dd1d2eb4b94a3d6c8cde03bb..47aefaebabc178f3621ddf90995d2938855a246f 100644 (file)
@@ -29,14 +29,14 @@ defmodule Pleroma.User do
   def avatar_url(user) do
     case user.avatar do
       %{"url" => [%{"href" => href} | _]} -> href
-      _ -> "https://placehold.it/48x48"
+      _ -> "#{Web.base_url()}/images/avi.png"
     end
   end
 
   def banner_url(user) do
     case user.info["banner"] do
       %{"url" => [%{"href" => href} | _]} -> href
-      _ -> nil
+      _ -> "#{Web.base_url()}/images/banner.png"
     end
   end
 
@@ -80,9 +80,15 @@ defmodule Pleroma.User do
     |> validate_length(:name, max: 100)
     |> put_change(:local, false)
     if changes.valid? do
-      followers = User.ap_followers(%User{nickname: changes.changes[:nickname]})
-      changes
-      |> put_change(:follower_address, followers)
+      case changes.changes[:info]["source_data"] do
+        %{"followers" => followers} ->
+          changes
+          |> put_change(:follower_address, followers)
+        _ ->
+          followers = User.ap_followers(%User{nickname: changes.changes[:nickname]})
+          changes
+          |> put_change(:follower_address, followers)
+      end
     else
       changes
     end
@@ -376,4 +382,19 @@ defmodule Pleroma.User do
 
     :ok
   end
+
+  def get_public_key_for_ap_id(ap_id) do
+    with %User{} = user <- get_cached_by_ap_id(ap_id),
+         %{info: %{"magic_key" => magic_key}} <- user,
+         public_key <- Pleroma.Web.Salmon.decode_key(magic_key) do
+      {:ok, public_key}
+    else
+      _ -> :error
+    end
+  end
+
+  def insert_or_update_user(data) do
+    cs = User.remote_user_creation(data)
+    Repo.insert(cs, on_conflict: :replace_all, conflict_target: :nickname)
+  end
 end