Federation support for Discourse

Una actualización aquí. Pavilion y CDCK (Discourse.org) están discutiendo la creación de un plugin ActivityPub para Discourse. Después de algunas discusiones, hemos llegado a la especificación a continuación. Cualquier comentario o sugerencia es bienvenido antes de finalizarla. Tenga en cuenta que

  • El soporte para contenido entrante (por ejemplo, publicaciones en Mastodon, etc. que se importan a Discourse) está intencionalmente excluido. Será posible agregar esto en una versión posterior.

  • El soporte para seguir usuarios (en contraposición a las categorías) también está intencionalmente excluido. También sería posible agregar esto en una versión posterior.

  • Partes sustanciales de la especificación siguen el enfoque adoptado por Lemmy.

  • Pavilion creará el plugin MVP (yo trabajaré en él), y CDCK lo poseerá y alojará (es decir, será un plugin de CDCK, no un plugin de Pavilion).

Resumen

Un plugin ActivityPub (AP) para Discourse.

El objetivo del plugin es una implementación MVP de las especificaciones ActivityPub, ActivityVocab y ActivityStreams en Discourse con una integración demostrada de la funcionalidad MVP para una plataforma compatible con AP, a saber Mastodon. En la medida de lo posible, la implementación se construirá para admitir un mayor soporte de los protocolos y cualquier extensión.

Esta especificación se refiere a la habilitación del soporte de AP por categoría, donde solo la primera publicación de cada tema en una categoría habilitada para AP se federará (“solo la primera publicación”).

Usuarios

El uso del plugin se documentará de manera integral en meta en un tema de plugin.

Usuario Normal

  1. Se suscribe (o “sigue”) una categoría de Discourse habilitada para federación (FDC) en Mastodon (o cualquier otro servicio fediverso) utilizando el manejador de la categoría, por ejemplo, @announcements@meta.discourse.org.

  2. Ve un extracto de la primera publicación de todos los temas de FDC (publicados después de que se suscriban) en su feed de Mastodon, cada uno con un enlace de regreso al tema asociado, por ejemplo, “Discutir en nuestro foro”.

  3. Cualquier acción relacionada con la publicación en Mastodon no aparece en Discourse.

  4. Cualquier acción relacionada con la publicación en Discourse no aparece en Mastodon.

  5. Los extractos de publicaciones federadas pueden ser controlados por el autor de la publicación utilizando marcado similar al utilizado para controlar los extractos de temas, por ejemplo, <div>{text}</div>

Administrador

  1. Habilita la federación por categoría utilizando una configuración de categoría. La federación solo se puede habilitar en categorías visibles para “todos” en instancias públicas.

  2. Establece el nombre de usuario federado de la categoría a través de la interfaz de configuración de la categoría (no se puede cambiar).

  3. Establece listas de dominios permitidos y denegados a través de la configuración del sitio desde la cual la actividad se acepta o rechaza automáticamente.

  4. Establece una “lista de bloqueo” de nombres de usuario federados para formar parte de un objeto(s) de bloqueo en la bandeja de salida del servidor.

  5. Establece la longitud máxima de caracteres de una nota federada utilizando una configuración del sitio, es decir, activitypub_note_excerpt_maxlength.

  6. Establece el texto asociado con el enlace incluido en la primera publicación de un tema de Discourse federado en “Personalizar > Texto”.

  7. Establece si el enlace de regreso (y el texto) al foro se incluye en las publicaciones federadas por categoría.

  8. Agrega un par de claves a través de la configuración del sitio para firmar el contenido federado.

Técnico

  1. El plugin incluirá pruebas completas (pruebas unitarias/de integración y pruebas js).

  2. La categoría es un Actor automatizado de ActivityPub dentro de Discourse (como un tipo de Actor Grupo). El preferredUsername federado se establece por el administrador al habilitar la federación y se almacena en un campo personalizado de la categoría. El nombre federado (también conocido como nombre para mostrar) es el full_name de la categoría.

  3. Los usuarios son Actores en el contenido federado por el Actor de la categoría. El preferredUsername federado es el nombre de usuario de Discourse del usuario en el momento de la federación. El preferredUsername de un usuario se almacena en un campo personalizado de usuario en caso de que el usuario cambie su nombre de usuario de Discourse. El nombre federado (también conocido como nombre para mostrar) es el nombre de usuario de Discourse del usuario.

  4. En general, los objetos de ActivityPub se asociarán con sus objetos de Discourse equivalentes utilizando campos personalizados cuando sea apropiado (por ejemplo, IDs de objeto o actor), y nuevas tablas cuando sea apropiado (por ejemplo, bandejas de entrada y salida).

  5. La actividad principal de ActivityPub a implementar es Seguir y las actividades y modelos asociados requeridos para implementarla, es decir, bandeja de entrada, bandeja de salida y Acciones y Colecciones asociadas requeridas.

  6. Las publicaciones de Discourse se federarán como Notas de ActivityStream, con el contenido como HTML.

  7. La autenticación se manejará utilizando Firmas HTTP, ver aquí y aquí. Se abordarán todas las demás Consideraciones de Seguridad en la especificación de ActivityPub según corresponda.

  8. Los puntos finales de federación estarán protegidos según corresponda a la especificación, es decir, asegúrese de que redirect_to_login_if_required se utilice en los controladores, agregue guardian para el permiso de que la categoría sea visible para todos.

34 Me gusta