Longer timeouts for outgoing federation.
[akkoma] / lib / pleroma / user.ex
index 9b2433674d87aa52939ed0d7d70989d6aaeec50d..869a3eb1b5b77352b41b3920da7072ab488a2eeb 100644 (file)
@@ -6,6 +6,7 @@ defmodule Pleroma.User do
   alias Comeonin.Pbkdf2
   alias Pleroma.Web.{OStatus, Websub}
   alias Pleroma.Web.ActivityPub.ActivityPub
+  alias Pleroma.Web.ActivityPub.Utils
 
   schema "users" do
     field :bio, :string
@@ -63,13 +64,14 @@ defmodule Pleroma.User do
 
   @email_regex ~r/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
   def remote_user_creation(params) do
-    changeset = %User{}
-    |> cast(params, [:bio, :name, :ap_id, :nickname, :info])
-    |> validate_required([:bio, :name, :ap_id, :nickname])
+    %User{}
+    |> cast(params, [:bio, :name, :ap_id, :nickname, :info, :avatar])
+    |> validate_required([:name, :ap_id, :nickname])
     |> unique_constraint(:nickname)
     |> validate_format(:nickname, @email_regex)
     |> validate_length(:bio, max: 1000)
     |> validate_length(:name, max: 100)
+    |> put_change(:local, false)
   end
 
   def register_changeset(struct, params \\ %{}) do
@@ -103,7 +105,7 @@ defmodule Pleroma.User do
       {:error,
        "Could not follow user: #{followed.nickname} is already on your list."}
     else
-      if !followed.local do
+      if !followed.local && follower.local do
         Websub.subscribe(follower, followed)
       end
 
@@ -125,7 +127,7 @@ defmodule Pleroma.User do
       { :ok, follower } = follower
       |> follow_changeset(%{following: following})
       |> Repo.update
-      { :ok, follower, ActivityPub.fetch_latest_follow(follower, followed)}
+      { :ok, follower, Utils.fetch_latest_follow(follower, followed)}
     else
       {:error, "Not subscribed!"}
     end
@@ -135,9 +137,13 @@ defmodule Pleroma.User do
     Enum.member?(follower.following, User.ap_followers(followed))
   end
 
+  def get_by_ap_id(ap_id) do
+    Repo.get_by(User, ap_id: ap_id)
+  end
+
   def get_cached_by_ap_id(ap_id) do
     key = "ap_id:#{ap_id}"
-    Cachex.get!(:user_cache, key, fallback: fn(_) -> Repo.get_by(User, ap_id: ap_id) end)
+    Cachex.get!(:user_cache, key, fallback: fn(_) -> get_by_ap_id(ap_id) end)
   end
 
   def get_cached_by_nickname(nickname) do