Rocket.Chat SSO + plugin d'intégration

image

Résumé : Ce plugin intègre Rocket.Chat à Discourse.

Vous devez obtenir une instance hébergée de Rocket.Chat distincte, par exemple avec Communiteq, Digital Ocean ou un autre fournisseur. Ce plugin intègre cette instance à votre forum.

L’intégration se compose de deux parties :

  • Intégration du chat dans l’interface utilisateur de Discourse
  • Connexion unique (SSO) entre Discourse et Rocket.Chat, où Discourse agit comme fournisseur d’authentification pour authentifier, créer et mettre à jour les utilisateurs dans Rocket.Chat.

:link: GitHub : GitHub - communiteq/discourse-rocketchat · GitHub
:arrow_right: Installation : Suivez le guide d’installation du plugin.
:pray:t3: Crédits : @jrgong a eu l’excellente idée d’intégrer Rocket.Chat à Discourse et a également développé une première version de l’interface utilisateur.

Captures d’écran

Le chat est intégré en bas à droite de l’interface de Discourse. Il peut être réduit ou agrandi en cliquant sur la barre de titre. Le chat reste ouvert lorsque vous naviguez dans le forum.

Sur mobile, le chat occupe tout l’écran et est accessible via l’icône Rocket.Chat dans la barre supérieure :

Configuration

L’intégration doit être configurée sur les deux systèmes. Discourse doit savoir où trouver le chat pour l’intégrer à son interface utilisateur, et Rocket.Chat doit savoir où trouver Discourse pour pouvoir authentifier les utilisateurs.

Côté Discourse

Admin - Plugins - Discourse RocketChat - Paramètres

discourse_rocketchat_enabled
Activer ou désactiver le plugin.

discourse rocketchat title
Configurez ici le titre de la fenêtre de chat, par exemple Chat.

discourse rocketchat host
Configurez le nom d’hôte de votre instance RocketChat, par exemple chat.example.com.
Ne préfixez pas ceci avec https:// ou similaire.

discourse rocketchat default channel
Configurez ici le canal par défaut, par exemple General.

discourse rocketchat min trust level
Configurez le niveau de confiance minimum requis pour que vos utilisateurs puissent utiliser Rocket.Chat, par exemple 2: member.

discourse rocketchat click entire bar
Activez cette option si vous souhaitez que toute la barre de titre soit cliquable pour développer ou masquer le chat. Désactivez-la si vous souhaitez uniquement que le texte « Ouvrir » et « Fermer » soit cliquable.

discourse rocketchat show menu for groups
Configurez les groupes pour lesquels vous souhaitez que Rocket.Chat affiche son menu, par exemple staff.

Côté Rocket.Chat

Administration - Paramètres - CAS

L’intégration utilise le protocole CAS 2.0 pour l’authentification et l’autorisation.

Remplacez forum.example.com par le nom de votre forum.

  • URL de base SSO : https://forum.example.com/rocketchat
  • URL de connexion SSO : https://forum.example.com/rocketchat/login
  • Version CAS : 2.0
  • Faire confiance au nom d’utilisateur CAS : activé
  • Autoriser la création d’utilisateurs : activé
  • Activé : activé

Administration - Paramètres - CAS - Gestion des attributs

Afin de pouvoir synchroniser l’adresse e-mail et le nom complet, nous devons configurer où ces attributs peuvent être trouvés.

  • Toujours synchroniser les données utilisateur : activé
  • Carte d’attributs : {"email":"%email%", "name":"%name%"}

Administration - Paramètres - Général

Nous devons pouvoir exécuter Rocket.Chat dans un iFrame.

  • Restreindre l’accès à l’intérieur de n’importe quel Iframe : désactivé

Administration - Paramètres - Comptes

Pour intégrer les deux plateformes, Discourse doit avoir le contrôle de la connexion et de l’inscription, ainsi que du nom complet, du nom et de l’adresse e-mail du compte. Vous devez désactiver les paramètres suivants du côté de Rocket.Chat :

  • Autoriser la modification de l’avatar utilisateur : désactivé
  • Autoriser la modification du nom : désactivé
  • Autoriser la modification du nom d’utilisateur : désactivé
  • Autoriser la modification de l’e-mail : désactivé
  • Afficher le formulaire de connexion par défaut : désactivé

Administration - Paramètres - Comptes - Inscription

  • Formulaire d’inscription : désactivé
  • URL secrète du formulaire d’inscription : (une chaîne aléatoire)

Administration - Paramètres - Comptes - Avatar

Rocket.Chat peut utiliser les avatars de Discourse.
Assurez-vous de remplacer forum.example.com par le nom de votre forum.

  • URL du fournisseur externe d’avatars : https://forum.example.com/rocketchat/avatar/{username}.png
20 « J'aime »

Je suis l’un des clients qui utilise ce plugin depuis un certain temps, et il est incroyable !!!

D’ailleurs @RGJ, peut-être ajouter au titre du sujet qu’il s’agit d’une solution SSO + Embed pour intégrer RC à votre instance Discourse existante.

Quiconque cherche une alternative viable à Babble Chat, c’est ici que se trouve votre Saint Graal !

9 « J'aime »

Super cool !

Une petite remarque concernant l’URL de l’avatar : en l’utilisant, les images ne s’affichent pas pour les utilisateurs ayant des avatars par défaut (lettres sur fond coloré), mais uniquement pour les images personnalisées ou les gravatars. Peut-être que quelqu’un connaît une autre URL qui permettrait d’inclure tous les avatars ? :slight_smile:

2 « J'aime »

C’est un excellent point @DiscourseMetrics, merci.
Je n’étais pas au courant d’une telle URL, alors j’en ai intégré une dans le plugin. Vous pouvez désormais récupérer n’importe quel avatar via https://forum.example.com/rocketchat/avatar/{username}.png, qu’il s’agisse d’un Gravatar, d’une image téléchargée ou d’une lettre.

5 « J'aime »

Ça a l’air super ! Malheureusement, mon d-header disparaît lorsque j’active cette option. Avez-vous une idée de la raison ?

1 « J'aime »

Hmmm… vous utilisez une multitude de composants de thème, ce qui rend le débogage difficile sans accès direct.

Je vois que j’utilisais une classe sans préfixe (.collapsible) susceptible de provoquer un conflit, j’ai donc ajouté un préfixe à celle-ci.

2 « J'aime »

Merci Richard, malheureusement, cela n’a pas fonctionné. J’ai également essayé d’installer sur l’un de mes autres sites, en désactivant tous les plugins et les TC, et le problème persiste, comme vous pouvez le voir ici Exploring Exposure - Discussions sur Exploring Exposure

2 « J'aime »

Je viens de réaliser que j’ai uniquement développé et testé ce plugin sur la branche stable. Le plugin génère une erreur et plante sur la version 2.8.x. Je vais enquêter et corriger cela. Merci pour votre signalement !

@davidkingham J’ai résolu le problème. Pourriez-vous s’il vous plaît reconstruire et retester ?

4 « J'aime »

Merci beaucoup pour ce plugin, il est incroyablement utile !

Juste deux petites choses :

  • Pour l’instant, je teste uniquement la partie intégration du chat. La fonction SSO du plugin permet-elle une intégration transparente avec la connexion automatique, ou l’utilisateur doit-il encore cliquer sur le bouton de connexion SSO pour se connecter (sans avoir à saisir de mot de passe) à Rocket.Chat ?
    Actuellement, je rencontre ce problème avec l’intégration SSO entre Rocket.Chat et Nextcloud, et jusqu’à présent, je n’ai pas trouvé de moyen de me connecter automatiquement à Rocket.Chat sans cliquer sur le bouton SSO.

  • Serait-il possible de configurer le chat intégré pour qu’il s’ouvre sur la page d’accueil personnalisable de Rocket.Chat et non sur un canal par défaut ?
    Pour l’instant, la seule option est de définir un canal par défaut, mais il serait également très utile que le chat intégré s’ouvre sur la page d’accueil personnalisable de Rocket.Chat.
    (Je viens d’ouvrir un ticket à ce sujet sur le dépôt GitHub ici, j’espère que cela ne dérangera personne).

Encore merci beaucoup pour votre précieuse contribution !

1 « J'aime »

Cette solution est utilisée dans phpFox, sous le nom de ChatPlus. Elle permet de transférer tous les messages de l’ancien chat vers Rocket Chat. Envisagez-vous d’ajouter une telle fonctionnalité ?

De quel « ancien chat » parlez-vous ? Cela ressemble davantage à une fonctionnalité de Rocket.Chat qu’à une fonctionnalité de Discourse. Ou ai-je mal compris ?

Définissez ce script comme « Script personnalisé pour les utilisateurs déconnectés » dans Rocket.Chat (assurez-vous de remplacer le nom d’hôte par le nom de votre forum sur la deuxième ligne). Remarque : je n’ai pas testé cela récemment. Je ne sais pas si je pourrai vous aider si cela ne fonctionne pas.

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);

Je vais m’en occuper dans quelques semaines. Je laisserai l’issue Github ouverte pour me souvenir de cela.

phpfox dispose d’une fonction permettant de transférer tous les anciens messages du chat natif vers Rocket.Chat (ChatPlus). Est-il possible de faire de même dans Discourse afin que Rocket.Chat puisse être utilisé exclusivement comme solution de chat ? Ainsi, aucun ancien message ne serait perdu et ce plugin pourrait être déployé sur d’anciens forums contenant déjà de nombreuses discussions.

Discourse ne dispose pas de fonctionnalité de chat native, alors d’où proviendraient ces messages ?
Par ailleurs, l’idée derrière un chat (par opposition à un forum) est que les messages de chat sont plus éphémères.

1 « J'aime »

Je veux dire des messages privés.

Ah, je vois. Dans ce cas, non.
Je ne suis pas sûr qu’il s’agisse vraiment d’un problème, car activer le plugin Rocket.Chat permet toujours cela, même lorsque les messages privés sont désactivés :

2 « J'aime »

Merci beaucoup pour votre réponse très informative.
J’avais déjà vu le script que vous avez publié ici, mais je pensais qu’il était valable uniquement pour l’authentification CAS et non pour l’authentification SSO. Je vais essayer et vérifier si le navigateur ne bloque pas la fenêtre cachée.

Merci beaucoup ! À mon avis, pouvoir définir par défaut la page d’accueil également dans la fenêtre de chat intégrée serait un ajout très intéressant. J’ai hâte de voir cela mis en œuvre éventuellement, au cas où vous trouveriez les ressources nécessaires pour y consacrer du temps. Merci d’envisager d’ajouter cette option.

Merci pour votre réponse. Sera-t-il possible d’utiliser Mattermost ou MongooseIM pour le chat à la place de Rocket.Chat ? Mattermost est écrit en Go, consomme moins de ressources et est plus évolutif. Ou cela n’est-il possible qu’avec Rocket.Chat ?

Non, il s’agit d’un plugin Rocket.Chat pour Discourse…

Le plugin utilise le protocole CAS 2.0 pour établir la fonctionnalité SSO.

Est-il possible de redessiner le chat pour qu’il s’intègre au forum ? Est-ce réalisable avec du CSS ? Merci.

Cela répond-il à votre question ? https://developer.rocket.chat/guides/developer/ui-and-theming

1 « J'aime »