Обновление. Pavilion и CDCK (Discourse.org) обсуждают создание плагина ActivityPub для Discourse. После некоторых обсуждений мы остановились на следующей спецификации. Любые комментарии или предложения приветствуются до её окончательного утверждения. Обратите внимание, что:
-
Поддержка входящего контента (например, постов из Mastodon и других платформ, импортируемых в Discourse) намеренно исключена. Возможность её добавления будет рассмотрена в более поздних версиях.
-
Поддержка подписки на пользователей (в отличие от категорий) также намеренно исключена. Это также может быть реализовано в будущих версиях.
-
Значительная часть спецификации следует подходу, принятому в проекте Lemmy.
-
Pavilion займётся разработкой MVP-плагина (над ним буду работать я), а CDCK будет его владельцем и хостом (то есть это будет плагин CDCK, а не Pavilion).
Обзор
Плагин ActivityPub (AP) для Discourse.
Цель плагина — реализация MVP спецификаций ActivityPub, ActivityVocab и ActivityStreams в Discourse с одной продемонстрированной интеграцией функционала MVP для платформы, совместимой с AP, а именно Mastodon. Насколько это возможно, реализация будет построена с учётом поддержки дальнейших расширений протоколов.
Данная спецификация касается включения поддержки AP на уровне категорий, при этом федерации подлежит только первый пост в каждой теме в категории с включённой поддержкой AP («только первый пост»).
Пользователи
Использование плагина будет подробно задокументировано на meta в теме, посвящённой плагину.
Обычный пользователь
-
Подписывается (также «следит») на категорию с включённой федерацией (FDC) в Discourse через Mastodon (или любой другой сервис федивёрса), используя идентификатор категории, например,
@announcements@meta.discourse.org. -
Видит в своей ленте Mastodon отрывки первых постов всех тем FDC (опубликованных после подписки), каждый из которых содержит ссылку на соответствующую тему, например: «Обсудить на нашем форуме».
-
Любые действия, связанные с постом в Mastodon, не отображаются в Discourse.
-
Любые действия, связанные с постом в Discourse, не отображаются в Mastodon.
-
Отрывки федеративных постов могут контролироваться автором поста с помощью разметки, аналогичной той, что используется для управления отрывками тем, например:
<div class="note">{text}</div>.
Администратор
-
Включает федерацию для каждой категории через настройку категории. Федерацию можно включить только для категорий, видимых «всем» на публичных инстансах.
-
Устанавливает федеративное имя пользователя категории через интерфейс настроек категории (изменить его нельзя).
-
Настраивает списки разрешённых и запрещённых доменов через настройки сайта, из которых активность автоматически принимается или отклоняется.
-
Устанавливает «список блокировок» федеративных имён пользователей, которые будут включены в объекты Block в исходящей очереди сервера.
-
Устанавливает максимальную длину текста федеративного сообщения через настройку сайта, например,
activitypub_note_excerpt_maxlength. -
Устанавливает текст, связанный со ссылкой, включаемой в первый пост федеративной темы Discourse, через раздел «Настроить > Текст».
-
Устанавливает, включается ли ссылка (и текст) обратно на форум в федеративные посты для каждой категории отдельно.
-
Добавляет пару ключей через настройки сайта для подписи федеративного контента.
Технические детали
-
Плагин будет включать комплексное тестирование (юнит-тесты, интеграционные тесты и JS-тесты).
-
Категория представляет собой автоматизированного актора ActivityPub внутри Discourse (как актор типа Group). Федеративное
preferredUsernameустанавливается администратором при включении федерации и сохраняется в пользовательском поле категории. Федеративное имя (также отображаемое имя) — это полное имя категории (full_name). -
Пользователи являются акторами в контенте, федеративно распространяемом актором категории. Федеративный
preferredUsername— это имя пользователя Discourse на момент федерации.preferredUsernameпользователя сохраняется в пользовательском поле пользователя на случай изменения им своего имени в Discourse. Федеративное имя (также отображаемое имя) — это имя пользователя в Discourse. -
В целом объекты ActivityPub будут ассоциированы с их эквивалентами в Discourse через пользовательские поля, где это уместно (например, идентификаторы объектов или акторов), а также через новые таблицы, где это необходимо (например, входящая и исходящая очереди).
-
Основной активностью ActivityPub для реализации является Follow, а также связанные с ней активности и модели, необходимые для её реализации, то есть входящая очередь, исходящая очередь и требуемые связанные действия и коллекции.
-
Посты Discourse будут федеративно распространяться как Notes в ActivityStream, с контентом в формате HTML.
-
Аутентификация будет осуществляться с использованием HTTP Signatures, см. здесь и здесь. Все остальные соображения безопасности в спецификации ActivityPub будут учтены по мере необходимости.
-
Эндпоинты федерации будут защищены в соответствии со спецификацией, то есть необходимо убедиться, что используется
redirect_to_login_if_requiredв контроллерах, а также добавить guardian для проверки прав доступа к категории, видимой всем.