Federation support for Discourse

Обновление. 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 в теме, посвящённой плагину.

Обычный пользователь

  1. Подписывается (также «следит») на категорию с включённой федерацией (FDC) в Discourse через Mastodon (или любой другой сервис федивёрса), используя идентификатор категории, например, @announcements@meta.discourse.org.

  2. Видит в своей ленте Mastodon отрывки первых постов всех тем FDC (опубликованных после подписки), каждый из которых содержит ссылку на соответствующую тему, например: «Обсудить на нашем форуме».

  3. Любые действия, связанные с постом в Mastodon, не отображаются в Discourse.

  4. Любые действия, связанные с постом в Discourse, не отображаются в Mastodon.

  5. Отрывки федеративных постов могут контролироваться автором поста с помощью разметки, аналогичной той, что используется для управления отрывками тем, например: <div class="note">{text}</div>.

Администратор

  1. Включает федерацию для каждой категории через настройку категории. Федерацию можно включить только для категорий, видимых «всем» на публичных инстансах.

  2. Устанавливает федеративное имя пользователя категории через интерфейс настроек категории (изменить его нельзя).

  3. Настраивает списки разрешённых и запрещённых доменов через настройки сайта, из которых активность автоматически принимается или отклоняется.

  4. Устанавливает «список блокировок» федеративных имён пользователей, которые будут включены в объекты Block в исходящей очереди сервера.

  5. Устанавливает максимальную длину текста федеративного сообщения через настройку сайта, например, activitypub_note_excerpt_maxlength.

  6. Устанавливает текст, связанный со ссылкой, включаемой в первый пост федеративной темы Discourse, через раздел «Настроить > Текст».

  7. Устанавливает, включается ли ссылка (и текст) обратно на форум в федеративные посты для каждой категории отдельно.

  8. Добавляет пару ключей через настройки сайта для подписи федеративного контента.

Технические детали

  1. Плагин будет включать комплексное тестирование (юнит-тесты, интеграционные тесты и JS-тесты).

  2. Категория представляет собой автоматизированного актора ActivityPub внутри Discourse (как актор типа Group). Федеративное preferredUsername устанавливается администратором при включении федерации и сохраняется в пользовательском поле категории. Федеративное имя (также отображаемое имя) — это полное имя категории (full_name).

  3. Пользователи являются акторами в контенте, федеративно распространяемом актором категории. Федеративный preferredUsername — это имя пользователя Discourse на момент федерации. preferredUsername пользователя сохраняется в пользовательском поле пользователя на случай изменения им своего имени в Discourse. Федеративное имя (также отображаемое имя) — это имя пользователя в Discourse.

  4. В целом объекты ActivityPub будут ассоциированы с их эквивалентами в Discourse через пользовательские поля, где это уместно (например, идентификаторы объектов или акторов), а также через новые таблицы, где это необходимо (например, входящая и исходящая очереди).

  5. Основной активностью ActivityPub для реализации является Follow, а также связанные с ней активности и модели, необходимые для её реализации, то есть входящая очередь, исходящая очередь и требуемые связанные действия и коллекции.

  6. Посты Discourse будут федеративно распространяться как Notes в ActivityStream, с контентом в формате HTML.

  7. Аутентификация будет осуществляться с использованием HTTP Signatures, см. здесь и здесь. Все остальные соображения безопасности в спецификации ActivityPub будут учтены по мере необходимости.

  8. Эндпоинты федерации будут защищены в соответствии со спецификацией, то есть необходимо убедиться, что используется redirect_to_login_if_required в контроллерах, а также добавить guardian для проверки прав доступа к категории, видимой всем.

34 лайка