implement invisible support for remote users
This commit is contained in:
parent
95871cb462
commit
ef659331b0
7 changed files with 95 additions and 7 deletions
|
|
@ -267,7 +267,8 @@ defmodule Pleroma.User.Info do
|
|||
:follower_count,
|
||||
:fields,
|
||||
:following_count,
|
||||
:discoverable
|
||||
:discoverable,
|
||||
:invisible
|
||||
])
|
||||
|> validate_fields(true)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1107,6 +1107,13 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
|
|||
data = Transmogrifier.maybe_fix_user_object(data)
|
||||
discoverable = data["discoverable"] || false
|
||||
|
||||
invisible =
|
||||
if is_list(data["type"]) do
|
||||
Enum.member?(data["type"], "Invisible")
|
||||
else
|
||||
false
|
||||
end
|
||||
|
||||
user_data = %{
|
||||
ap_id: data["id"],
|
||||
info: %{
|
||||
|
|
@ -1115,7 +1122,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
|
|||
banner: banner,
|
||||
fields: fields,
|
||||
locked: locked,
|
||||
discoverable: discoverable
|
||||
discoverable: discoverable,
|
||||
invisible: invisible
|
||||
},
|
||||
avatar: avatar,
|
||||
name: data["name"],
|
||||
|
|
|
|||
|
|
@ -596,13 +596,20 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
|
|||
data,
|
||||
_options
|
||||
)
|
||||
when object_type in ["Person", "Application", "Service", "Organization"] do
|
||||
when object_type in [
|
||||
"Person",
|
||||
"Application",
|
||||
"Service",
|
||||
"Organization",
|
||||
["Application", "Invisible"]
|
||||
] do
|
||||
with %User{ap_id: ^actor_id} = actor <- User.get_cached_by_ap_id(object["id"]) do
|
||||
{:ok, new_user_data} = ActivityPub.user_data_from_user_object(object)
|
||||
|
||||
banner = new_user_data[:info][:banner]
|
||||
locked = new_user_data[:info][:locked] || false
|
||||
attachment = get_in(new_user_data, [:info, :source_data, "attachment"]) || []
|
||||
invisible = new_user_data[:info][:invisible] || false
|
||||
|
||||
fields =
|
||||
attachment
|
||||
|
|
@ -612,7 +619,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
|
|||
update_data =
|
||||
new_user_data
|
||||
|> Map.take([:name, :bio, :avatar])
|
||||
|> Map.put(:info, %{banner: banner, locked: locked, fields: fields})
|
||||
|> Map.put(:info, %{banner: banner, locked: locked, fields: fields, invisible: invisible})
|
||||
|
||||
actor
|
||||
|> User.upgrade_changeset(update_data, true)
|
||||
|
|
|
|||
|
|
@ -491,10 +491,14 @@ defmodule Pleroma.Web.ActivityPub.Utils do
|
|||
%Activity{data: %{"actor" => actor}},
|
||||
object
|
||||
) do
|
||||
announcements = take_announcements(object)
|
||||
unless actor |> User.get_cached_by_ap_id() |> User.invisible?() do
|
||||
announcements = take_announcements(object)
|
||||
|
||||
with announcements <- Enum.uniq([actor | announcements]) do
|
||||
update_element_in_object("announcement", announcements, object)
|
||||
with announcements <- Enum.uniq([actor | announcements]) do
|
||||
update_element_in_object("announcement", announcements, object)
|
||||
end
|
||||
else
|
||||
{:ok, object}
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue