Federation support for Discourse

アップデートのお知らせです。PavilionとCDCK (Discourse.org) は、Discourse用のActivityPubプラグインの構築について議論しています。いくつかの議論を経て、以下の仕様に落ち着きました。最終決定の前に、コメントや提案を歓迎します。なお、

  • 受信コンテンツ(Mastodonなどでの投稿をDiscourseにインポートするなど)のサポートは、意図的に除外されています。これは後バージョンで追加可能です。

  • ユーザーのフォロー(カテゴリではなく)のサポートも、意図的に除外されています。これも後バージョンで追加可能です。

  • 仕様の大部分は、Lemmyが採用したアプローチに従っています。

  • MVPプラグインはPavilionが構築します(私が担当します)。CDCKがそれを所有・ホストします(つまり、Pavilionプラグインではなく、CDCKプラグインになります)。

概要

Discourse用ActivityPub (AP) プラグイン。

このプラグインの目標は、ActivityPubActivityVocabActivityStreamsの仕様のMVP実装をDiscourseで行い、AP準拠プラットフォームであるMastodonとの統合を実証することです。可能な限り、実装はプロトコルのさらなるサポートや拡張をサポートするように構築されます。

この仕様は、AP対応カテゴリごとに、AP対応カテゴリ内のトピックの最初の投稿のみがフェデレーションされる(「最初の投稿のみ」)ようにAPサポートを有効にすることに関するものです。

ユーザー

プラグインの使用方法は、プラグイントピックのmetaで包括的に文書化されます。

通常ユーザー

  1. Mastodon(または他のFediverseサービス)で、カテゴリのハンドル(例: @announcements@meta.discourse.org)を使用して、フェデレーション対応Discourseカテゴリ(FDC)を購読(「フォロー」)します。

  2. FDCトピックの最初の投稿の抜粋(購読後に投稿されたもの)をMastodonフィードで表示し、各投稿には関連トピックへのリンク(例: 「フォーラムで議論する」)が含まれます。

  3. Mastodonでの投稿に関連するアクションはDiscourseには表示されません。

  4. Discourseでの投稿に関連するアクションはMastodonには表示されません。

  5. フェデレーションされた投稿の抜粋は、投稿者がトピックの抜粋を制御するために使用されるものと同様のマークアップを使用して制御できます。例: <div>{text}</div>

管理者

  1. カテゴリ設定を使用して、カテゴリごとにフェデレーションを有効にします。フェデレーションは、パブリックインスタンスで「全員」に表示されるカテゴリでのみ有効にできます。

  2. カテゴリのフェデレーションユーザー名を、カテゴリ設定UIで設定します(変更不可)。

  3. アクティビティが自動的に受け入れられるか拒否されるドメインの許可リストと拒否リストをサイト設定から設定します。

  4. サーバーのアウトボックスにあるBlock object(s)の一部となるフェデレーションユーザー名の「ブロックリスト」を設定します。

  5. サイト設定(例: activitypub_note_excerpt_maxlength)を使用して、フェデレーションされたノートの最大文字長を設定します。

  6. 「カスタマイズ > テキスト」で、フェデレーションされたDiscourseトピックの最初の投稿に含まれるリンクに関連付けられたテキストを設定します。

  7. フェデレーションされた投稿にフォーラムへのリンク(およびテキスト)が含まれるかどうかを、カテゴリごとに設定します。

  8. フェデレーションされたコンテンツに署名するためのキーペアをサイト設定に追加します。

技術

  1. プラグインには包括的なテスト(単体/統合およびJSテスト)が含まれます。

  2. カテゴリは、Discourse内の自動化されたActivityPub Actorです(Group ActorTypeとして)。フェデレーションされたpreferredUsernameは、管理者がフェデレーションを有効にする際に設定し、カテゴリカスタムフィールドに保存されます。フェデレーション名(表示名)は、カテゴリのfull_nameです。

  3. ユーザーは、カテゴリActorによってフェデレーションされるコンテンツ内のActorです。フェデレーションされたpreferredUsernameは、フェデレーション時のユーザーのDiscourseユーザー名です。ユーザーがDiscourseユーザー名を変更した場合に備えて、ユーザーのpreferredUsernameはユーザーカスタムフィールドに保存されます。フェデレーション名(表示名)は、ユーザーのDiscourse名です。

  4. 一般的に、ActivityPubオブジェクトは、適切なカスタムフィールド(例: オブジェクトまたはアクターID)を使用して同等のDiscourseオブジェクトに関連付けられ、適切な場合は新しいテーブル(例: 受信トレイと送信トレイ)が使用されます。

  5. 実装する主要なActivityPub ActivityはFollowと、それを実装するために必要な関連アクティビティおよびモデル(つまり、受信トレイ、送信トレイ、および必要な関連アクションとコレクション)です。

  6. Discourseの投稿は、ActivityStreamのNotesとしてフェデレーションされ、コンテンツはHTML形式になります。

  7. 認証はHTTP署名を使用して処理されます。詳細はこちらこちらを参照してください。ActivityPub仕様の他のすべてのセキュリティに関する考慮事項は、適切に対処されます。

  8. フェデレーションエンドポイントは、仕様に応じて適切に保護されます。つまり、コントローラーでredirect_to_login_if_requiredが使用されていることを確認し、カテゴリの「全員が見れる」権限に対するGuardianを追加します。

「いいね!」 34