From 14176ccc893bb1b85fe1f99380086f373f383700 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Mon, 16 Dec 2019 11:46:19 +0100 Subject: [PATCH] Support pt:CommentsEnabled in addition to mz:repliesModeration Signed-off-by: Thomas Citharel --- docs/contribute/activity_pub.md | 11 ++++++++++- lib/service/activity_pub/converter/event.ex | 8 +++++++- lib/service/activity_pub/utils.ex | 5 +++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/docs/contribute/activity_pub.md b/docs/contribute/activity_pub.md index 47986abe9..27017c1d6 100644 --- a/docs/contribute/activity_pub.md +++ b/docs/contribute/activity_pub.md @@ -10,7 +10,7 @@ To match usernames to actors, Mobilizon uses [WebFinger](https://tools.ietf.org/ ## Instance subscriptions -Instances subscribe to each other through an internal actor named `relay@instance.tld` that publishes (through `Announce`) every created content to it's followers. Each content creation share is saved so that updates and deletes are correctly sent to every +Instances subscribe to each other through an internal actor named `relay@instance.tld` that publishes (through `Announce`) every created content to it's followers. Each content creation share is saved so that updates and deletes are correctly sent to every relay subscriber. ## Activities @@ -46,6 +46,9 @@ See [the corresponding issue](https://framagit.org/framasoft/mobilizon/issues/32 Accepted values: `allow_all`, `closed`, `moderated` (not used at the moment) +!!! info + We also support PeerTube's `commentEnabled` property as a fallback. It is set to `true` only when `repliesModeration` is equal to `allow_all`. + Example: ```json { @@ -53,6 +56,7 @@ Example: "...", { "mz": "https://joinmobilizon.org/ns#", + "pt": "https://joinpeertube.org/ns#", "repliesModerationOption": { "@id": "mz:repliesModerationOption", "@type": "mz:repliesModerationOptionType" @@ -60,11 +64,16 @@ Example: "repliesModerationOptionType": { "@id": "mz:repliesModerationOptionType", "@type": "rdfs:Class" + }, + "commentsEnabled": { + "@id": "pt:commentsEnabled", + "@type": "sc:Boolean" } } ], "...": "...", "repliesModerationOption": "allow_all", + "commentsEnabled": true, "type": "Event", "url": "http://mobilizon1.com/events/8cf76e9f-c426-4912-9cd6-c7030b969611" } diff --git a/lib/service/activity_pub/converter/event.ex b/lib/service/activity_pub/converter/event.ex index a273b87f1..d02065fe8 100644 --- a/lib/service/activity_pub/converter/event.ex +++ b/lib/service/activity_pub/converter/event.ex @@ -119,6 +119,7 @@ defmodule Mobilizon.Service.ActivityPub.Converter.Event do "tag" => event.tags |> ConverterUtils.build_tags(), "maximumAttendeeCapacity" => event.options.maximum_attendee_capacity, "repliesModerationOption" => event.options.comment_moderation, + "commentsEnabled" => event.options.comment_moderation == :allow_all, # "draft" => event.draft, "ical:status" => event.status |> to_string |> String.upcase(), "id" => event.url, @@ -140,7 +141,12 @@ defmodule Mobilizon.Service.ActivityPub.Converter.Event do defp get_options(object) do %{ maximum_attendee_capacity: object["maximumAttendeeCapacity"], - comment_moderation: object["repliesModerationOption"] + comment_moderation: + Map.get( + object, + "repliesModerationOption", + if(Map.get(object, "commentsEnabled", true), do: :allow_all, else: :closed) + ) } end diff --git a/lib/service/activity_pub/utils.ex b/lib/service/activity_pub/utils.ex index 94c06a16a..3e99e7bd6 100644 --- a/lib/service/activity_pub/utils.ex +++ b/lib/service/activity_pub/utils.ex @@ -32,6 +32,7 @@ defmodule Mobilizon.Service.ActivityPub.Utils do %{ "sc" => "http://schema.org#", "ical" => "http://www.w3.org/2002/12/cal/ical#", + "pt" => "https://joinpeertube.org/ns#", "Hashtag" => "as:Hashtag", "category" => "sc:category", "uuid" => "sc:identifier", @@ -45,6 +46,10 @@ defmodule Mobilizon.Service.ActivityPub.Utils do "@id" => "mz:repliesModerationOption", "@type" => "mz:repliesModerationOptionType" }, + "commentsEnabled" => %{ + "@type" => "sc:Boolean", + "@id" => "pt:commentsEnabled" + }, "joinModeType" => %{ "@id" => "mz:joinModeType", "@type" => "rdfs:Class"