Complemento ActivityPub

Bueno, un usuario de Mastodon lo verá en el contexto de una línea de tiempo, y las líneas de tiempo son generalmente limitadas. En Mastodon, por defecto, una línea de tiempo total no supera los 400 posts. Si estás viendo el original, de todos modos estás viendo en Discourse. Así que, si bien es cierto en teoría, no creo que cause confusión real en la práctica. Ya tienes que ser un seguidor para ver el contenido; seguir un enlace al original te lleva a Discourse, donde la confusión se resuelve.

¿No es perfecto, pero quizás una opción “menos mala”?

Supongo que, como alternativa, podrías federar una edición que anote la publicación como reemplazada por una transferencia de propiedad, ¿algo así como añadir el enlace “discute esto en nuestro foro”?

Claro, no estoy discutiendo que no sea una diferencia, solo digo que parece una diferencia aceptable, en comparación con bloquear una característica útil y utilizada de Discourse.

Eliminar el original dejará hilos huérfanos en el contexto de otras plataformas a las que estás federando, ya que no puedes cambiar el actor asociado con una actividad en una edición (según entiendo).

Una alternativa podría ser dejar de federar las ediciones en absoluto si la publicación en Discourse tiene un autor diferente al que tenía cuando se federó por primera vez. ¿Quizás con una advertencia? “¿Cambiar el propietario deshabilitará la federación para esta publicación, ¿realmente quieres continuar?”

Sí. Eso es lo que parece en Discourse para un usuario normal, que podría no saber que puede hacer clic en el icono del lápiz y revisar los cambios, o no tener permisos. Estos están arraigados en el uso normal de Discourse, como lo veo:

  • Hacer que una publicación sea una wiki significa que aceptas que las ediciones de otros aparezcan en el uso normal bajo tu propio nombre.
  • Incluso si no es una wiki, los usuarios con privilegios suficientes pueden editar tu publicación en Discourse, dependiendo de la configuración del sitio.

Desde mi perspectiva, esto es lo más parecido a un equivalente que se puede obtener, dadas las diferencias en el modelo subyacente.

Como lo veo, “haz clic para ver la publicación en el sitio original” ya muestra contenido diferente entre implementaciones que priorizan el fediverso, incluso ignorando este plugin. Diferentes conjuntos de comentarios visibles, diferente marcado, diferente manejo de artículos. Por lo tanto, que algunas diferencias sean visibles a través de este plugin no me sorprende; creo que es inevitable.

(Gracias de nuevo por tu reflexiva consideración de estas ideas. Reconozco que estos son casos límite difíciles, estoy agradecido por el trabajo, no asumo que mis ideas sean las mejores y no pretendo crear ninguna sensación de obligación para esta fase o cualquier fase de trabajo en esto, ni siquiera para responder a nada en particular de lo que estoy escribiendo).

1 me gusta

Al igual que con el cambio de categoría, creo que realmente depende del escenario. Considere, por ejemplo:

  1. Se crea la Publicación 1 en la Categoría 1 por el Usuario 1 (Actor 1).
  2. El autor de la Publicación 1 es cambiado por el Usuario 3 (un administrador) al Usuario 2 (Actor 2) 2 minutos después.
  3. La Categoría 1 es seguida por 400 Actores en 20 dominios y 5 plataformas de software diferentes, cada una con una implementación ligeramente diferente de las líneas de tiempo y el descubrimiento de contenido.
  4. Dentro de los 2 minutos posteriores a la creación de la Publicación 1, hay 2 Notas con contenido idéntico y Actores diferentes PUBLICADAS a esos 400 Seguidores.

Creo que eso probablemente causará confusión a un subconjunto decente de seguidores, sin mencionar el hecho de que el Usuario 2 podría ni siquiera darse cuenta de que su nombre ahora está asociado con este contenido duplicado que no escribió en 20 dominios diferentes. Podrían estar de acuerdo con que los administradores hagan eso en una sola instancia, hay un consentimiento implícito al publicar en esa instancia, sin embargo, creo que deberíamos ser muy cautelosos al extender ese consentimiento implícito a todo el fediverso, especialmente en las circunstancias imperfectas de duplicar el contenido. Cambiar los propietarios de las publicaciones es una poderosa función administrativa, específica de Discourse, y está implícitamente ligada al “contrato social” de una sola instancia.

Creo que el argumento para los wikis es más fuerte, sin embargo, volvería a observar lo que ya has aludido. Los wikis son un concepto arraigado en el Discourse normal. Asociar las ediciones de cualquier persona (no solo del personal) con el autor original es un concepto de Discourse, sin un análogo en ActivityPub. Deberíamos ser cautelosos al extender ese concepto utilizando los métodos estándar de ActivityPub a todo el fediverso. Esas actividades de Actualización serán tratadas como cualquier otra actividad de Actualización en muchas instancias y plataformas de software diferentes, descontextualizadas de su contexto wiki original. Además, como también has aludido, ya existe un problema potencial en este sentido con la capacidad del personal y los usuarios de alta confianza para editar las publicaciones de otros. Creo que esa pregunta más limitada necesita más consideración antes de llegar a la pregunta de los wikis.

No estoy tratando de establecer una elección binaria entre Discourse y ActivityPub para estas funciones. Lo que digo es que no deberíamos intentar mapear la funcionalidad sensible de Discourse al Fediverso sin pensar cuidadosamente en las consecuencias. El valor predeterminado debería ser que estas funciones más sensibles estén deshabilitadas en las publicaciones de ActivityPub hasta que tengamos un poco más de confianza en que no terminaremos perjudicando o sorprendiendo a un subconjunto decente de usuarios o casos de uso.

Personalmente, no siento que estemos allí todavía con ninguno de los dos, aunque mi instinto me dice que el caso del wiki tiene más potencial en esta etapa, incluso si todavía no veo una buena solución.

8 Me gusta

Estos dos elementos también están hechos, acabo de fusionar el PR de Angus para la verificación de identidad a través de OAuth. Dejando de lado las correcciones de errores y las mejoras de rendimiento, esto completa la fase actual de características añadidas al plugin.

Tal como está, el plugin tiene muchas funciones. Para recapitular rápidamente las características principales, el plugin admite:

  • Publicación de solo seguidores en ActivityPub (el valor predeterminado es Público)
  • Publicación de la primera publicación o del tema completo (el valor predeterminado es la primera publicación)
  • Sincronización bidireccional al usar la publicación del tema completo, es decir, todas las publicaciones creadas en Discourse en un tema se publicarán en ActivityPub y viceversa, las respuestas en ActivityPub se publicarán en Discourse
  • Opción para publicar publicaciones como Notas (para servicios de contenido más cortos como Mastodon) o Artículo (más apropiado para servicios de contenido largo)
  • Verificación de identidad

A continuación, trabajaremos en el ajuste fino de las características actuales y en la mejora de la usabilidad. Por supuesto, todavía se aceptan comentarios. Estoy particularmente interesado en formas de explicar cómo funciona todo esto a los usuarios habituales, no es una tarea fácil.

Estoy muy de acuerdo con @angus, nuestro objetivo es hacer lo que sea práctico y alcanzable con una cantidad razonable de esfuerzo. Para ello, estamos dispuestos a aceptar algunas funcionalidades reducidas en Discourse en este momento. Esa es nuestra mejor oportunidad para averiguar si limitaciones específicas son importantes de abordar o no (por ejemplo, ¿los usuarios del plugin se encontrarán a menudo con limitaciones de wiki-ActivityPub?).

6 Me gusta

¿Entiendo correctamente, entonces, que hemos llegado al punto en que tiene sentido articular las restricciones?

Hola :slight_smile:

Primero, gracias por desarrollar todo esto.

Luego, estoy muy interesado en conectar diferentes servicios de ActivityPub entre sí, y por lo que he leído, se trata principalmente de enviar mensajes de Discourse a Mastodon de un lado a otro.

Soy consciente de que el protocolo es agnóstico al servicio, pero ¿existe algún tipo de documentación para, digamos, conectar diferentes instancias de Discourse, o integrar Nextcloud, o PeerTube, etc.?

1 me gusta

Hemos deshabilitado los cambios de autor de publicaciones y las wikis en temas de ActivityPub por ahora por las razones que ya he mencionado (sus suposiciones no funcionan con ActivityPub de inmediato). Esas son las únicas dos características que se han deshabilitado temporalmente en temas de ActivityPub de esta manera. Cualquier otra funcionalidad reducida debe informarse como un problema.

Este es un plugin de ActivityPub que sigue de cerca la especificación de ActivityPub, por lo que está diseñado para funcionar con cualquier servicio que siga esa especificación, lo que incluye todos los que ha mencionado (y otros). Mastodon es la primera plataforma de ActivityPub con la que nos hemos centrado en la integración porque, en la práctica, debe garantizar la compatibilidad con un servicio a la vez y es la plataforma de ActivityPub más grande.

4 Me gusta

Intentado dos veces en https://meta.discourse.org/u/rokejulianlockhart/preferences/activity-pub

```json { "errors": ["No tienes permiso para ver el recurso solicitado."], "error_type": "invalid_access" } ```

¿Qué hago?

2 Me gusta

Hola @rokejulianlockhart, gracias por tus comentarios. ¿Cómo estás realizando el flujo de autorización? ¿Estás haciendo clic en “Autorizar” en la captura de pantalla anterior en un navegador (¿cuál navegador?) o estás copiando y pegando las URL de alguna manera? Pregunto porque las tienes ahí en tu publicación. Aquí tienes un video del flujo estándar funcionando para mí en meta.discourse.org

¿Estás haciendo algo diferente a eso?

2 Me gusta

@angus,

  1. rokejulianlockhart@mastodon.social

  2. Estás a punto de iniciar sesión en el sitio “mastodon.social” con el nombre de usuario “rokejulianlockhart”, pero el sitio web no requiere autenticación. Esto puede ser un intento de engañarte.

    ¿Es “mastodon.social” el sitio que deseas visitar?

    Aquí hago clic

  3. Log in - Mastodon

    Se requiere autorización
    meta.discourse.org desea permiso para acceder a tu cuenta. Es una aplicación de terceros. Si no confías en ella, no deberías autorizarla.
    Revisar permisos

    Cuentas
    Acceso de solo lectura

    Aquí hago clic

    Autorizar

  4. Luego, el anterior

    ¿Es “mastodon.social” el sitio que deseas visitar?

    aviso aparece, y hago lo mismo.

  5. https://meta.discourse.org/ap/auth/oauth/redirect?code=s2H3Og_3oLTb8cAsYN9Kmgeh8xPySeOaWSp2bdZ2sEE

    1. .JSON

      {"errors":["No tienes permiso para ver el recurso solicitado."],"error_type":"invalid_access"}
      
    2. Encabezados

      X-Firefox-Spdy: h2
      content-encoding: gzip
      content-type: application/json; charset=utf-8
      date: Mon, 25 Sep 2023 11:39:30 GMT
      referrer-policy: strict-origin-when-cross-origin
      server: nginx
      vary: Accept-Encoding
      x-content-type-options: nosniff
      x-discourse-route: o_auth/redirect
      x-discourse-username: rokejulianlockhart
      x-download-options: noopen
      x-frame-options: SAMEORIGIN
      x-permitted-cross-domain-policies: none
      x-request-id: 01276bd6-77ea-42ae-8f60-6fa365a70e1f
      x-xss-protection: 0
      
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
      Accept-Encoding: gzip, deflate, br
      Accept-Language: en-GB,en;q=0.7,en-US;q=0.3
      Connection: keep-alive
      Host: meta.discourse.org
      Sec-Fetch-Dest: document
      Sec-Fetch-Mode: navigate
      Sec-Fetch-Site: cross-site
      Sec-Fetch-User: ?1
      Upgrade-Insecure-Requests: 1
      User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/117.0
      

Hola, después de la última actualización, parece que se rompen los perfiles de usuario (/u/usuario). Se mostraría el nombre de usuario y la foto de perfil (además de la lista de ofensas del usuario en la parte superior).

Revisamos nuestra lista de plugins y deshabilitamos cada uno uno por uno hasta que el problema desapareció. También funcionó con el modo seguro activado. Aquí hay algunos de los errores del cliente que obtendríamos:

Cannot read properties of null (reading 'getBoundingClientRect')
at Object.offset (https://amcforum.wiki/assets/vendor-db2360c46fde6d9039e575c45f307a3475f72fc389fad00414eaf0f83a1621a6.js:5104:37)
at e.scrolled (https://amcforum.wiki/assets/discourse-9756bc4a118ac228ac6ac3f2b29c7d4a7d60a9f16ece25de4a772f0055c6eb94.js:2347:106)
at p.invoke (https://amcforum.wiki/assets/vendor-db2360c46fde6d9039e575c45f307a3475f72fc389fad00414eaf0f83a1621a6.js:4339:182)
at p.flush (https://amcforum.wiki/assets/vendor-db2360c46fde6d9039e575c45f307a3475f72fc389fad00414eaf0f83a1621a6.js:4331:141)
at h.flush (https://amcforum.wiki/assets/vendor-db2360c46fde6d9039e575c45f307a3475f72fc389fad00414eaf0f83a1621a6.js:4346:207)
at $._end (https://amcforum.wiki/assets/vendor-db2360c46fde6d9039e575c45f307a3475f72fc389fad00414eaf0f83a1621a6.js:4410:9)
at $.end (https://amcforum.wiki/assets/vendor-db2360c46fde6d9039e575c45f307a3475f72fc389fad00414eaf0f83a1621a6.js:4363:240)
at $._runExpiredTimers (https://amcforum.wiki/assets/vendor-db2360c46fde6d9039e575c45f307a3475f72fc389fad00414eaf0f83a1621a6.js:4417:192)

Aquí está cómo se ve con el plugin activado (para tu propia cuenta)

Para otro usuario (en este caso, 9pfs)

Aquí hay otro error divertido causado por el plugin:

Actualmente estamos ejecutando 3.2.0.beta2-dev de este commit y estamos ejecutando la versión 0.1.0 del plugin de este commit.

1 me gusta

@rokejulianlockhart ¿Tienes las cookies deshabilitadas o alguna extensión de privacidad en ejecución? El flujo de autorización actualmente depende de una cookie de sesión segura para funcionar.

@aboutDavid Gracias por el informe. Si bien es posible, parece poco probable que lo que estás compartiendo sea causado por un problema en este plugin. ¿Podrías compartir un enlace a tu sitio? ¿También tienes algún tema o componente de tema habilitado?

2 Me gusta

Desde la solución de problemas en modo seguro, sabemos lo siguiente con certeza:

  1. Es un plugin no oficial
  2. No es un tema ni un componente de tema.

Hasta donde sé, tenemos dos plugins no oficiales:

  1. Animar avatares (Confirmado manualmente que no es el culpable)
  2. ActivityPub

En cuanto a un enlace al sitio:

3 Me gusta

La interfaz de actualización muestra una marca de verificación junto a todos los plugins, excepto esos dos (lo que indica que son plugins oficiales).

2 Me gusta

El problema en tu sitio probablemente está siendo causado por algo que utiliza el outlet de plugin user-profile-avatar-flair. Este plugin no utiliza ese outlet. El plugin de avatares animados sí lo hace.

¿Cómo lo confirmaste?

1 me gusta

@aboutDavid comprobó y se aseguró de que el plugin no tuviera JS del lado del cliente. ¿Es el problema en parte del lado del servidor?

1 me gusta

Que no haya JavaScript del lado del cliente no significa necesariamente que no haya problemas del lado del cliente. En este caso, el problema parece surgir de la forma en que se está utilizando un “plugin outlet”, posiblemente en una plantilla. ¿Podrías intentar eliminar el plugin de avatares animados y decirme el resultado?

(Por cierto, el plugin de avatares animados sí tiene JavaScript del lado del cliente. Ver por ejemplo).

1 me gusta

Acabo de ir a editar una categoría aquí en Meta (para cambiar algunos permisos de acceso de grupo). No cambié ninguna configuración relacionada con activitypub, pero terminamos con estas tres entradas en el registro del personal:

Supongo que técnicamente pasaron de nil a su valor predeterminado, por lo que no hay un cambio real en el comportamiento. Aún así, sería bueno evitar este registro de eliminación para evitar confusiones.

2 Me gusta

Gracias por el informe David, lo revisaré pronto.

1 me gusta

Ups, soy un poco tonto hoy, disculpas

edición: sí, lo más probable es que sean avatares animados, lamento hacerte perder el tiempo lol

3 Me gusta

@angus, que yo sepa no.

y me aseguré de deshabilitar uBlock Origin, aunque de todos modos no uso las listas de privacidad.


Sin embargo, hoy me he encontrado con un problema diferente al probar esto.

Log in - Mastodon

La autenticación del cliente falló debido a un cliente desconocido, no se incluyó autenticación del cliente o un método de autenticación no compatible.

Google Search.