Federation support for Discourse

Uma atualização aqui. Pavilion e CDCK (Discourse.org) estão discutindo a construção de um plugin ActivityPub para Discourse. Após alguma discussão, chegamos à especificação abaixo. Quaisquer comentários ou sugestões são bem-vindos antes de finalizarmos. Observe que

  • O suporte para conteúdo de entrada (por exemplo, posts no Mastodon, etc. sendo importados para o Discourse) está intencionalmente excluído. Será possível adicionar isso em uma versão posterior.

  • O suporte para seguir usuários (em oposição a categorias) também está intencionalmente excluído. Também seria possível adicionar isso em uma versão posterior.

  • Partes substanciais da especificação seguem a abordagem adotada pelo Lemmy.

  • O Pavilion construirá o plugin MVP (eu trabalharei nele), e o CDCK o possuirá e hospedará (ou seja, será um plugin CDCK, não um plugin Pavilion).

Visão Geral

Um Plugin ActivityPub (AP) para Discourse.

O objetivo do plugin é uma implementação MVP das especificações ActivityPub, ActivityVocab e ActivityStreams no Discourse com uma integração demonstrada da funcionalidade MVP para uma plataforma compatível com AP, nomeadamente Mastodon. Na medida do possível, a implementação será construída para suportar suporte adicional aos protocolos e quaisquer extensões.

Esta especificação diz respeito à ativação do suporte AP em uma base por categoria, onde apenas o primeiro post de cada tópico em uma categoria habilitada para AP é federado (“apenas o primeiro post”).

Usuários

O uso do plugin será documentado de forma abrangente no meta em um tópico de plugin.

Usuário Normal

  1. Assina (também conhecido como “segue”) uma categoria Discourse habilitada para federação (FDC) no Mastodon (ou qualquer outro serviço fediverso) usando o identificador da categoria, por exemplo, @announcements@meta.discourse.org.

  2. Vê um trecho do primeiro post de todos os tópicos FDC (postados após a assinatura) em seu feed Mastodon, cada um com um link de volta para o tópico associado, por exemplo, “Discutir em nosso fórum”.

  3. Qualquer ação relacionada ao post no Mastodon não aparece no Discourse.

  4. Qualquer ação relacionada ao post no Discourse não aparece no Mastodon.

  5. Trechos de posts federados podem ser controlados pelo autor do post usando marcação semelhante à usada para controlar trechos de tópicos, por exemplo, <div>{text}</div>

Administrador

  1. Habilita a federação em uma base por categoria usando uma configuração de categoria. A federação só pode ser habilitada em categorias visíveis para “todos” em instâncias públicas.

  2. Define o nome de usuário federado da categoria através da interface de configurações da categoria (não pode ser alterado).

  3. Define listas de permissão e negação de domínios através de configurações do site a partir das quais a atividade é automaticamente aceita ou rejeitada.

  4. Define uma “lista de bloqueio” de nomes de usuário federados para fazer parte de um Objeto(s) de Bloqueio na caixa de saída do servidor.

  5. Define o comprimento máximo de caracteres de uma nota federada usando uma configuração do site, ou seja, activitypub_note_excerpt_maxlength.

  6. Define o texto associado ao link incluído no primeiro post de um tópico Discourse federado em “Personalizar > Texto”.

  7. Define se o link de volta (e o texto) para o fórum é incluído em posts federados em uma base por categoria.

  8. Adiciona um par de chaves através de configurações do site para assinar o conteúdo federado.

Técnico

  1. O plugin incluirá testes abrangentes (testes unitários/de integração e testes js).

  2. A categoria é um Ator ActivityPub automatizado dentro do Discourse (como um Grupo ActorType). O preferredUsername federado é definido pelo administrador ao habilitar a federação e armazenado em um campo personalizado da categoria. O nome federado (também conhecido como nome de exibição) é o full_name da categoria.

  3. Os usuários são Atores no conteúdo federado pelo Ator da categoria. O preferredUsername federado é o nome de usuário do Discourse do usuário no momento da federação. O preferredUsername de um usuário é armazenado em um campo personalizado do usuário caso o usuário altere seu nome de usuário do Discourse. O nome federado (também conhecido como nome de exibição) é o nome do usuário no Discourse.

  4. Em geral, os objetos ActivityPub serão associados aos seus objetos Discourse equivalentes usando campos personalizados, quando apropriado (por exemplo, IDs de objeto ou ator), e novas tabelas, quando apropriado (por exemplo, inbox e outbox).

  5. A principal Atividade ActivityPub a ser implementada é Seguir e atividades e modelos associados necessários para implementá-la, ou seja, inbox, outbox e Ações e Coleções necessárias.

  6. Posts do Discourse seriam federados como Notas do ActivityStream, com o conteúdo em HTML.

  7. A autenticação será tratada usando Assinaturas HTTP, veja aqui e aqui. Todas as outras Considerações de Segurança na especificação ActivityPub serão abordadas conforme apropriado.

  8. Os endpoints de federação serão protegidos conforme apropriado para a especificação, ou seja, garantir que redirect_to_login_if_required seja usado nos controladores, adicionar guardião para permissão de categoria que todos possam ver.

34 curtidas