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
-
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. -
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”.
-
Qualquer ação relacionada ao post no Mastodon não aparece no Discourse.
-
Qualquer ação relacionada ao post no Discourse não aparece no Mastodon.
-
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
-
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.
-
Define o nome de usuário federado da categoria através da interface de configurações da categoria (não pode ser alterado).
-
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.
-
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.
-
Define o comprimento máximo de caracteres de uma nota federada usando uma configuração do site, ou seja,
activitypub_note_excerpt_maxlength. -
Define o texto associado ao link incluído no primeiro post de um tópico Discourse federado em “Personalizar > Texto”.
-
Define se o link de volta (e o texto) para o fórum é incluído em posts federados em uma base por categoria.
-
Adiciona um par de chaves através de configurações do site para assinar o conteúdo federado.
Técnico
-
O plugin incluirá testes abrangentes (testes unitários/de integração e testes js).
-
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.
-
Os usuários são Atores no conteúdo federado pelo Ator da categoria. O
preferredUsernamefederado é o nome de usuário do Discourse do usuário no momento da federação. OpreferredUsernamede 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. -
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).
-
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.
-
Posts do Discourse seriam federados como Notas do ActivityStream, com o conteúdo em HTML.
-
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.
-
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.