Rocket.Chat SSO + complemento embebido

image

Resumen: Este plugin integra Rocket.Chat con Discourse.

Necesitas obtener una instancia alojada de Rocket.Chat por separado, por ejemplo, con Communiteq, Digital Ocean u otro proveedor. Este plugin integra esa instancia con tu foro.

La integración consta de dos partes:

  • Incrustación del chat dentro de la interfaz de usuario de Discourse
  • Inicio de sesión único (SSO) entre Discourse y Rocket.Chat, donde Discourse actúa como proveedor de autenticación para autenticar, crear y actualizar usuarios en Rocket.Chat.

:link: GitHub: GitHub - communiteq/discourse-rocketchat · GitHub
:arrow_right: Instalar: Sigue la guía de instalación de plugins.
:pray:t3: Créditos: @jrgong tuvo la gran idea de integrar Rocket.Chat con Discourse y también desarrolló una primera versión de la interfaz de usuario.

Capturas de pantalla

El chat está incrustado en la esquina inferior derecha de la interfaz de Discourse. Se puede contraer y expandir haciendo clic en la barra de título. El chat permanece abierto cuando navegas por el foro.

En dispositivos móviles, el chat ocupa toda la pantalla y es accesible mediante el icono de Rocket.Chat en la barra superior:

Configuración

La integración debe configurarse en ambos sistemas. Discourse necesita saber dónde encontrar el chat para integrarlo en su interfaz de usuario, y Rocket.Chat necesita saber dónde encontrar Discourse para poder autenticar.

Lado de Discourse

Administración - Plugins - Discourse RocketChat - Configuración

discourse_rocketchat_enabled
Habilitar o deshabilitar el plugin.

discourse rocketchat title
Configura aquí el título de la ventana del chat, por ejemplo, Chat.

discourse rocketchat host
Configura aquí el nombre de host de tu instancia de RocketChat, por ejemplo, chat.ejemplo.com.
No agregues prefijos como https://.

discourse rocketchat default channel
Configura aquí el canal predeterminado, por ejemplo, General.

discourse rocketchat min trust level
Configura el nivel de confianza mínimo que deben tener tus usuarios para poder usar Rocket.Chat, por ejemplo, 2: miembro.

discourse rocketchat click entire bar
Habilita esta opción si deseas que toda la barra de título sea clicable para expandir o ocultar el chat. Deshabilítala si solo deseas que el texto ‘Abrir’ y ‘Cerrar’ sea clicable.

discourse rocketchat show menu for groups
Configura los grupos para los cuales deseas que Rocket.Chat muestre su menú, por ejemplo, staff.

Lado de Rocket.Chat

Administración - Configuración - CAS

La integración utiliza el protocolo CAS 2.0 para la autenticación y autorización.

Reemplaza foro.ejemplo.com con el nombre de tu foro.

  • URL base de SSO: https://foro.ejemplo.com/rocketchat
  • URL de inicio de sesión de SSO: https://foro.ejemplo.com/rocketchat/login
  • Versión de CAS: 2.0
  • Confiar en el nombre de usuario de CAS: habilitado
  • Permitir creación de usuarios: habilitado
  • Habilitado: habilitado

Administración - Configuración - CAS - Manejo de atributos

Para poder sincronizar la dirección de correo electrónico y el nombre completo, debemos configurar dónde se encuentran esos atributos.

  • Sincronizar siempre datos de usuario: habilitado
  • Mapa de atributos: {"email":"%email%", "name":"%name%"}

Administración - Configuración - General

Necesitamos poder ejecutar Rocket.Chat dentro de un iFrame.

  • Restringir acceso dentro de cualquier iFrame: deshabilitado

Administración - Configuración - Cuentas

Para integrar ambas plataformas, Discourse debe tener control sobre el inicio de sesión, el registro, el nombre completo, el nombre de usuario y la dirección de correo electrónico de la cuenta. Debes deshabilitar las siguientes configuraciones en el lado de Rocket.Chat:

  • Permitir cambio de avatar de usuario: deshabilitado
  • Permitir cambio de nombre: deshabilitado
  • Permitir cambio de nombre de usuario: deshabilitado
  • Permitir cambio de correo electrónico: deshabilitado
  • Mostrar formulario de inicio de sesión predeterminado: deshabilitado

Administración - Configuración - Cuentas - Registro

  • Formulario de registro: deshabilitado
  • URL secreta del formulario de registro: (alguna cadena aleatoria)

Administración - Configuración - Cuentas - Avatar

Rocket.Chat puede utilizar los avatares de Discourse.
Asegúrate de reemplazar foro.ejemplo.com con el nombre de tu foro.

  • URL del proveedor externo de avatares: https://foro.ejemplo.com/rocketchat/avatar/{username}.png
20 Me gusta

¡Soy uno de los clientes que lleva tiempo usando este plugin y es increíble!!!

Por cierto, @RGJ, quizás podrías añadir al título del tema que es una solución SSO + Embed para integrar RC en tu instancia existente de Discourse.

¿Alguien busca una alternativa viable a Babble Chat? ¡Esto es su santo grial!

9 Me gusta

¡Muy genial!

Una nota sobre la URL del avatar: al usar esta, no se mostrarán imágenes para los usuarios con avatares predeterminados (letras sobre un fondo de color), solo imágenes personalizadas o gravatars. ¿Quizás alguien conozca una URL diferente que pueda usarse y que incluya todos los avatares? :slight_smile:

2 Me gusta

Ese es un buen punto, @DiscourseMetrics, gracias.
No tenía conocimiento de una URL así, por lo que he integrado una en el plugin. Ahora puedes obtener cualquier avatar usando https://forum.example.com/rocketchat/avatar/{username}.png, ya sea que provenga de Gravatar, de una imagen subida o de una letra.

5 Me gusta

¡Esto se ve genial! Lamentablemente, mi encabezado desaparece cuando activo esto, ¿tienes idea de por qué?

1 me gusta

Hmmm… estás utilizando una cantidad enorme de componentes de tema, por lo que es difícil depurar sin acceso directo.

Veo que estaba usando una clase sin prefijo (.collapsible) que probablemente cause un conflicto, así que ahora le he añadido un prefijo.

2 Me gusta

Gracias, Richard, pero lamentablemente eso no funcionó. También intenté instalarlo en uno de mis otros sitios, desactivé todos los complementos y TC, y el problema persiste, como puedes ver aquí: Exploring Exposure - Exploring Exposure Discussions

2 Me gusta

Acabo de darme cuenta de que solo he desarrollado y probado este plugin contra la rama stable. El plugin está lanzando un error y se está cerrando en la versión 2.8.x. Voy a investigar y solucionar esto. ¡Gracias por tu informe!

@davidkingham He solucionado el problema; ¿podrías volver a compilar y probar de nuevo, por favor?

4 Me gusta

¡Muchas gracias por este plugin, es increíblemente útil!

Solo dos cosas:

  • Por ahora, solo estoy probando la parte de incrustación del chat de la integración. ¿Permite la función SSO del plugin una integración perfecta con autologin, o el usuario aún necesita hacer clic en el botón de inicio de sesión SSO para entrar (sin tener que escribir ninguna contraseña) a Rocket.Chat?
    Actualmente estoy experimentando este problema con la integración SSO entre Rocket.Chat y Nextcloud y, hasta ahora, no he encontrado una forma de iniciar sesión automáticamente en Rocket.Chat sin tener que hacer clic en el botón SSO.

  • ¿Sería posible configurar el chat incrustado para que se abra en la página principal de Rocket.Chat y no en un canal predeterminado?
    Por ahora, la única opción es establecer un canal predeterminado, pero que el chat incrustado también se abra en la página principal personalizable de Rocket.Chat sería muy útil.
    (Acabo de abrir un problema sobre esto en el repositorio de GitHub aquí, espero que no moleste a nadie).

¡Muchas gracias de nuevo por tu valiosa contribución!

1 me gusta

Esta solución se utiliza en phpfox y se llama ChatPlus. Allí puedes transferir todos los mensajes del chat antiguo a Rocket.Chat. ¿Tienes previsto añadir una función similar?

¿A qué “chat antiguo” te refieres? Esto suena más como una función de Rocket.Chat que de Discourse. ¿O me estoy equivocando?

Configura este script como “Script personalizado para usuarios desconectados” en Rocket.Chat (asegúrate de reemplazar el nombre de host con el nombre de tu foro en la segunda línea). Nota: No lo he probado recientemente. No estoy seguro de poder ayudarte si no funciona.

const credentialToken = Random.id();
const login_url = "https://discourse.example.com/rocketchat/login";

const appUrl = Meteor.absoluteUrl().replace(/\/$/, '') + __meteor_runtime_config__.ROOT_URL_PATH_PREFIX;
const delim = (login_url.split('?').length > 1) ? '&' : '?';

var i = document.createElement('iframe');
i.style.display = 'none';
i.onload = function() { 
    Accounts.callLoginMethod({
        methodArguments: [{ cas: { credentialToken } }],
    });
};
i.src = `${ login_url }${ delim }service=${ appUrl }`;
document.body.appendChild(i);

Voy a investigar esto en unas semanas. Mantendré abierta la incidencia en GitHub para recordármelo.

phpfox tiene una función para transferir todos los mensajes antiguos del chat nativo a Rocket.Chat (ChatPlus). ¿Es posible hacer esto en Discourse para que solo se pueda usar Rocket.Chat como chat? De esta manera, no se perderán todos los mensajes antiguos y se podrá usar este plugin en foros antiguos que ya tienen muchos mensajes.

Discourse no tiene un chat nativo, ¿de dónde vendrían entonces estos mensajes?
Además, la idea detrás de un chat (frente a un foro) es que los mensajes de chat son más efímeros.

1 me gusta

Me refiero a mensajes privados.

Ah, entiendo. En ese caso, no.
No estoy seguro de que esto sea realmente un problema, ya que habilitar el complemento de Rocket.Chat aún lo permite, incluso cuando se desactivan los mensajes privados:

2 Me gusta

Muchas gracias por tu respuesta tan informativa.
Antes había visto el script que publicaste aquí, pero pensé que solo era válido para la autenticación CAS y no para la SSO. Lo probaré y verificaré si el navegador no bloquea la ventana oculta.

¡Muchísimas gracias! En mi opinión, poder establecer la página de inicio de forma predeterminada también en la ventana de chat incrustada sería una adición muy interesante. Espero que llegue a implementarse eventualmente, en caso de que encuentres los recursos para dedicar algo de tiempo a ello. Gracias por considerar añadir esta opción.

Gracias por la respuesta. ¿Será posible usar Mattermost o MongooseIM para el chat en lugar de Rocket.Chat? Mattermost está escrito en Go, consume menos recursos y es más escalable. ¿O esto solo es posible con Rocket.Chat?

No, este es un complemento de Rocket.Chat para Discourse…

El complemento utiliza el protocolo CAS 2.0 para establecer la funcionalidad de SSO.

¿Es posible rediseñar el chat para que se adapte al foro? ¿Se puede hacer esto con CSS? Gracias.

¿Esto responde a tu pregunta? https://developer.rocket.chat/guides/developer/ui-and-theming

1 me gusta