diff --git a/lib/federation/activity_stream/converter/post.ex b/lib/federation/activity_stream/converter/post.ex index f8d23c7ce..4f09c4285 100644 --- a/lib/federation/activity_stream/converter/post.ex +++ b/lib/federation/activity_stream/converter/post.ex @@ -65,10 +65,11 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Post do @impl Converter @spec as_to_model_data(map) :: {:ok, map} | {:error, any()} def as_to_model_data( - %{"type" => "Article", "actor" => creator, "attributedTo" => group} = object + %{"type" => "Article", "actor" => creator, "attributedTo" => group_uri} = object ) do - with {:ok, %Actor{id: attributed_to_id}} <- get_actor(group), + with {:ok, %Actor{id: attributed_to_id} = group} <- get_actor(group_uri), {:ok, %Actor{id: author_id}} <- get_actor(creator), + {:visibility, visibility} <- {:visibility, get_visibility(object, group)}, [description: description, picture_id: picture_id, medias: medias] <- process_pictures(object, attributed_to_id) do %{ @@ -81,6 +82,7 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Post do publish_at: object["published"], picture_id: picture_id, medias: medias, + visibility: visibility, draft: object["draft"] == true } else @@ -128,4 +130,17 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Post do &(&1 ++ medias) ) end + + @ap_public "https://www.w3.org/ns/activitystreams#Public" + + defp get_visibility(%{"to" => to}, %Actor{ + followers_url: followers_url, + members_url: members_url + }) do + cond do + @ap_public in to -> :public + followers_url in to -> :unlisted + members_url in to -> :private + end + end end