aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/mix/tasks/fix_ap_users.ex28
-rw-r--r--lib/pleroma/user.ex21
2 files changed, 19 insertions, 30 deletions
diff --git a/lib/mix/tasks/fix_ap_users.ex b/lib/mix/tasks/fix_ap_users.ex
deleted file mode 100644
index 7e970850e..000000000
--- a/lib/mix/tasks/fix_ap_users.ex
+++ /dev/null
@@ -1,28 +0,0 @@
-defmodule Mix.Tasks.FixApUsers do
- use Mix.Task
- import Ecto.Query
- alias Pleroma.{Repo, User}
-
- @shortdoc "Grab all ap users again"
- def run([]) do
- Mix.Task.run("app.start")
-
- q =
- from(
- u in User,
- where: fragment("? @> ?", u.info, ^%{"ap_enabled" => true}),
- where: u.local == false
- )
-
- users = Repo.all(q)
-
- Enum.each(users, fn user ->
- try do
- IO.puts("Fetching #{user.nickname}")
- Pleroma.Web.ActivityPub.Transmogrifier.upgrade_user_from_ap_id(user.ap_id, false)
- rescue
- e -> IO.inspect(e)
- end
- end)
- end
-end
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index 1dad30e87..e3e6aa0d8 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -22,6 +22,7 @@ defmodule Pleroma.User do
field(:info, :map, default: %{})
field(:follower_address, :string)
field(:search_distance, :float, virtual: true)
+ field(:last_refreshed_at, :naive_datetime)
has_many(:notifications, Notification)
timestamps()
@@ -112,8 +113,12 @@ defmodule Pleroma.User do
end
def upgrade_changeset(struct, params \\ %{}) do
+ params =
+ params
+ |> Map.put(:last_refreshed_at, NaiveDateTime.utc_now())
+
struct
- |> cast(params, [:bio, :name, :info, :follower_address, :avatar])
+ |> cast(params, [:bio, :name, :info, :follower_address, :avatar, :last_refreshed_at])
|> unique_constraint(:nickname)
|> validate_format(:nickname, ~r/^[a-zA-Z\d]+$/)
|> validate_length(:bio, max: 5000)
@@ -169,6 +174,16 @@ defmodule Pleroma.User do
end
end
+ def needs_update?(%User{local: true}), do: false
+
+ def needs_update?(%User{local: false, last_refreshed_at: nil}), do: true
+
+ def needs_update?(%User{local: false} = user) do
+ NaiveDateTime.diff(NaiveDateTime.utc_now(), user.last_refreshed_at) >= 86400
+ end
+
+ def needs_update?(_), do: true
+
def maybe_direct_follow(%User{} = follower, %User{info: info} = followed) do
user_config = Application.get_env(:pleroma, :user)
deny_follow_blocked = Keyword.get(user_config, :deny_follow_blocked)
@@ -655,7 +670,9 @@ defmodule Pleroma.User do
end
def get_or_fetch_by_ap_id(ap_id) do
- if user = get_by_ap_id(ap_id) do
+ user = get_by_ap_id(ap_id)
+
+ if !is_nil(user) and !User.needs_update?(user) do
user
else
ap_try = ActivityPub.make_user_from_ap_id(ap_id)