Federation support for Discourse

업데이트 소식입니다. Pavilion과 CDCK(Discourse.org)는 Discourse용 ActivityPub 플러그인을 구축하는 것을 논의하고 있습니다. 충분한 논의를 거쳐 아래 명세에 도달했습니다. 최종 확정 전까지 의견이나 제안을 환영합니다. 참고할 점은 다음과 같습니다.

  • 수신 콘텐츠(예: Mastodon 등에 있는 게시글을 Discourse로 가져오는 것)에 대한 지원은 의도적으로 제외되었습니다. 이는 후속 버전에서 추가할 수 있습니다.

  • 사용자 팔로우(카테고리 팔로우와 달리)에 대한 지원도 의도적으로 제외되었습니다. 이 역시 후속 버전에서 추가할 수 있습니다.

  • 명세의 상당한 부분은 Lemmy가 채택한 방식을 따르고 있습니다.

  • Pavilion은 MVP 플러그인을 구축할 예정이며(저는 이 작업에 참여할 것입니다), CDCK는 이를 소유하고 호스팅할 것입니다(즉, Pavilion 플러그인이 아닌 CDCK 플러그인이 됩니다).

개요

Discourse용 ActivityPub(AP) 플러그인입니다.

이 플러그인의 목표는 ActivityPub, ActivityVocab 및 ActivityStreams 명세의 MVP 구현을 Discourse에서 달성하는 것이며, AP 준수 플랫폼인 Mastodon에 대한 MVP 기능의 통합을 하나의 사례로 보여주는 것입니다. 가능한 한 구현은 프로토콜의 추가 지원 및 모든 확장성을 지원하도록 구축될 것입니다.

이 명세는 AP 지원이 활성화된 카테고리에서 해당 카테고리의 각 토픽의 첫 번째 게시글만 연방화(“​첫 번째 게시글만”)되도록 카테고리별 AP 지원을 활성화하는 것에 관한 것입니다.

사용자

플러그인 사용법은 메타(meta)의 플러그인 토픽에서 포괄적으로 문서화될 것입니다.

일반 사용자

  1. 카테고리 핸들(예: @announcements@meta.discourse.org)을 사용하여 Mastodon(또는 기타 Fediverse 서비스)에서 연방화(Discourse)가 활성화된 Discourse 카테고리(FDC)를 구독(또는 “팔로우”)합니다.

  2. Mastodon 피드에서 FDC 토픽의 첫 번째 게시글 발췌(구독한 이후에 게시된 것)를 확인하며, 각 발췌에는 관련 토픽으로 돌아가는 링크(예: “포럼에서 논의하기”)가 포함됩니다.

  3. Mastodon에서 해당 게시글과 관련된 모든 작업은 Discourse에 표시되지 않습니다.

  4. Discourse에서 해당 게시글과 관련된 모든 작업은 Mastodon에 표시되지 않습니다.

  5. 연방화된 게시글 발췌는 토픽 발췌 제어를 위해 사용되는 것과 유사한 마크업을 사용하여 게시글 작성자가 제어할 수 있습니다. 예: <div class="note">{text}</div>

관리자

  1. 카테고리 설정을 사용하여 카테고리별로 연방화를 활성화합니다. 공개 인스턴스에서 연방화는 "모두"에게 표시되는 카테고리에서만 활성화할 수 있습니다.

  2. 카테고리 설정 UI를 통해 카테고리의 연방화 사용자명을 설정합니다(변경 불가).

  3. 사이트 설정을 통해 활동이 자동으로 허용되거나 거부되는 도메인의 허용 목록과 거부 목록을 설정합니다.

  4. 서버 아웃박스(outbox)의 Block 객체에 포함될 연방화 사용자명의 "차단 목록"을 설정합니다.

  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 객체와 연관되고, 적절한 경우 새로운 테이블(예: 인박스(inbox)와 아웃박스(outbox))가 사용됩니다.

  5. 구현할 주요 ActivityPub Activity는 Follow이며, 이를 구현하는 데 필요한 관련 활동 및 모델(즉, 인박스, 아웃박스 및 필요한 관련 Actions와 Collections)입니다.

  6. Discourse 게시글은 ActivityStream Notes로 연방화되며, 콘텐츠는 HTML로 제공됩니다.

  7. 인증은 HTTP Signatures를 사용하여 처리됩니다. 여기와 여기를 참조하세요. ActivityPub 명세의 모든 기타 보안 고려 사항은 적절히 처리될 것입니다.

  8. 연방화 엔드포인트는 명세에 맞게 적절하게 보호됩니다. 즉, 컨트롤러에서 redirect_to_login_if_required가 사용되도록 하고, 모든 사용자가 볼 수 있는 카테고리 권한에 대한 가디언(guardian)을 추가합니다.

34개의 좋아요