forked from AkkomaGang/akkoma
Merge pull request 'Refresh Users much more aggressively when processing Move activities' (#714) from erincandescent/akkoma:move-bust-cache into develop
Reviewed-on: AkkomaGang/akkoma#714
This commit is contained in:
commit
554f19a9ed
2 changed files with 15 additions and 9 deletions
|
@ -969,15 +969,16 @@ defp maybe_send_registration_email(%User{email: email} = user) when is_binary(em
|
||||||
|
|
||||||
defp maybe_send_registration_email(_), do: {:ok, :noop}
|
defp maybe_send_registration_email(_), do: {:ok, :noop}
|
||||||
|
|
||||||
def needs_update?(%User{local: true}), do: false
|
def needs_update?(user, options \\ [])
|
||||||
|
def needs_update?(%User{local: true}, _options), do: false
|
||||||
|
def needs_update?(%User{local: false, last_refreshed_at: nil}, _options), do: true
|
||||||
|
|
||||||
def needs_update?(%User{local: false, last_refreshed_at: nil}), do: true
|
def needs_update?(%User{local: false} = user, options) do
|
||||||
|
NaiveDateTime.diff(NaiveDateTime.utc_now(), user.last_refreshed_at) >=
|
||||||
def needs_update?(%User{local: false} = user) do
|
Keyword.get(options, :maximum_age, 86_400)
|
||||||
NaiveDateTime.diff(NaiveDateTime.utc_now(), user.last_refreshed_at) >= 86_400
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def needs_update?(_), do: true
|
def needs_update?(_, _options), do: true
|
||||||
|
|
||||||
# "Locked" (self-locked) users demand explicit authorization of follow requests
|
# "Locked" (self-locked) users demand explicit authorization of follow requests
|
||||||
@spec can_direct_follow_local(User.t(), User.t()) :: true | false
|
@spec can_direct_follow_local(User.t(), User.t()) :: true | false
|
||||||
|
@ -1980,10 +1981,10 @@ def html_filter_policy(_), do: Config.get([:markup, :scrub_policy])
|
||||||
|
|
||||||
def fetch_by_ap_id(ap_id), do: ActivityPub.make_user_from_ap_id(ap_id)
|
def fetch_by_ap_id(ap_id), do: ActivityPub.make_user_from_ap_id(ap_id)
|
||||||
|
|
||||||
def get_or_fetch_by_ap_id(ap_id) do
|
def get_or_fetch_by_ap_id(ap_id, options \\ []) do
|
||||||
cached_user = get_cached_by_ap_id(ap_id)
|
cached_user = get_cached_by_ap_id(ap_id)
|
||||||
|
|
||||||
maybe_fetched_user = needs_update?(cached_user) && fetch_by_ap_id(ap_id)
|
maybe_fetched_user = needs_update?(cached_user, options) && fetch_by_ap_id(ap_id)
|
||||||
|
|
||||||
case {cached_user, maybe_fetched_user} do
|
case {cached_user, maybe_fetched_user} do
|
||||||
{_, {:ok, %User{} = user}} ->
|
{_, {:ok, %User{} = user}} ->
|
||||||
|
|
|
@ -576,7 +576,12 @@ def handle_incoming(
|
||||||
_options
|
_options
|
||||||
) do
|
) do
|
||||||
with %User{} = origin_user <- User.get_cached_by_ap_id(origin_actor),
|
with %User{} = origin_user <- User.get_cached_by_ap_id(origin_actor),
|
||||||
{:ok, %User{} = target_user} <- User.get_or_fetch_by_ap_id(target_actor),
|
# Use a dramatically shortened maximum age before refresh here because it is reasonable
|
||||||
|
# for a user to
|
||||||
|
# 1. Add the alias to their new account and then
|
||||||
|
# 2. Press the button on their new account
|
||||||
|
# within a very short period of time and expect it to work
|
||||||
|
{:ok, %User{} = target_user} <- User.get_or_fetch_by_ap_id(target_actor, maximum_age: 5),
|
||||||
true <- origin_actor in target_user.also_known_as do
|
true <- origin_actor in target_user.also_known_as do
|
||||||
ActivityPub.move(origin_user, target_user, false)
|
ActivityPub.move(origin_user, target_user, false)
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in a new issue