Rocket.Chat SSO + plugin de incorporação

image

Resumo: Este plugin integra o Rocket.Chat ao Discourse.

Você precisa obter uma instância hospedada do Rocket.Chat separadamente, por exemplo, com a Communiteq, Digital Ocean ou outro provedor. Este plugin integra essa instância ao seu fórum.

A integração consiste em duas partes:

  • Incorporação do chat na interface do usuário do Discourse
  • Login único (SSO) entre o Discourse e o Rocket.Chat, onde o Discourse atua como provedor de autenticação para autenticar, criar e atualizar usuários no Rocket.Chat.

:link: GitHub: GitHub - communiteq/discourse-rocketchat · GitHub
:arrow_right: Instalar: Siga o guia de instalação do plugin.
:pray:t3: Créditos: @jrgong teve a excelente ideia de integrar o Rocket.Chat ao Discourse e também desenvolveu a primeira versão da interface do usuário.

Capturas de tela

O chat é incorporado no canto inferior direito da interface do Discourse. Ele pode ser recolhido e expandido clicando na barra de título. O chat permanece aberto quando você navega pelo fórum.

No celular, o chat ocupa a tela inteira e é acessível pelo ícone do Rocket.Chat na barra superior:

Configuração

A integração precisa ser configurada em ambos os sistemas. O Discourse precisa saber onde encontrar o chat para integrá-lo à sua interface do usuário, e o Rocket.Chat precisa saber onde encontrar o Discourse para poder autenticar.

Lado do Discourse

Admin - Plugins - Discourse RocketChat - Configurações

discourse_rocketchat_enabled
Ativa ou desativa o plugin.

discourse rocketchat title
Configure aqui o título da janela do chat, por exemplo, Chat.

discourse rocketchat host
Configure o nome de host da sua instância do RocketChat, por exemplo, chat.exemplo.com.
Não prefixe isso com https:// ou similar.

discourse rocketchat default channel
Configure aqui o canal padrão, por exemplo, Geral.

discourse rocketchat min trust level
Configure o nível de confiança mínimo para seus usuários para que possam usar o Rocket.Chat, por exemplo, 2: membro.

discourse rocketchat click entire bar
Ative esta opção se quiser que toda a barra de título seja clicável para expandir ou ocultar o chat. Desative se quiser que apenas o texto “Abrir” e “Fechar” seja clicável.

discourse rocketchat show menu for groups
Configure os grupos para os quais você deseja que o Rocket.Chat exiba seu menu, por exemplo, staff.

Lado do Rocket.Chat

Administração - Configurações - CAS

A integração usa o protocolo CAS 2.0 para autenticação e autorização.

Substitua forum.exemplo.com pelo nome do seu fórum.

  • URL Base do SSO: https://forum.exemplo.com/rocketchat
  • URL de Login do SSO: https://forum.exemplo.com/rocketchat/login
  • Versão do CAS: 2.0
  • Confiar no nome de usuário do CAS: ativado
  • Permitir criação de usuário: ativado
  • Ativado: ativado

Administração - Configurações - CAS - Tratamento de Atributos

Para poder sincronizar o endereço de e-mail e o nome completo, precisamos configurar onde esses atributos podem ser encontrados.

  • Sincronizar sempre dados do usuário: ativado
  • Mapeamento de Atributos: {"email":"%email%", "name":"%name%"}

Administração - Configurações - Geral

Precisamos ser capazes de executar o Rocket.Chat em um iframe.

  • Restringir acesso dentro de qualquer Iframe: desativado

Administração - Configurações - Contas

Para integrar as duas plataformas, o Discourse deve ter controle sobre o login, o registro e o nome completo, nome e endereço de e-mail da conta. Você precisa desativar as seguintes configurações no lado do Rocket.Chat:

  • Permitir alteração de avatar do usuário: desativado
  • Permitir alteração de nome: desativado
  • Permitir alteração de nome de usuário: desativado
  • Permitir alteração de e-mail: desativado
  • Mostrar formulário de login padrão: desativado

Administração - Configurações - Contas - Registro

  • Formulário de registro: desativado
  • URL secreta do formulário de registro: (alguma string aleatória)

Administração - Configurações - Contas - Avatar

O Rocket.Chat pode usar os avatares do Discourse.
Certifique-se de substituir forum.exemplo.com pelo nome do seu fórum.

  • URL do provedor externo de avatar: https://forum.exemplo.com/rocketchat/avatar/{username}.png
20 curtidas

Sou um dos clientes que tem usado o plugin há algum tempo e é incrível!!!

A propósito, @RGJ, talvez você possa adicionar ao título do tópico que se trata de uma solução SSO + Embed para integrar o RC à sua instância existente do Discourse.

Qualquer pessoa que esteja procurando uma alternativa viável ao Babble Chat, essa é a sua solução definitiva!

9 curtidas

Muito legal!

Uma observação sobre a URL do avatar: ao usá-la, não serão exibidas imagens para usuários com avatares padrão (letras em fundo colorido), apenas imagens personalizadas ou gravatars. Talvez alguém conheça uma URL diferente que inclua todos os avatares? :slight_smile:

2 curtidas

Isso é um bom ponto, @DiscourseMetrics, obrigado.
Não tinha conhecimento de tal URL, então criei uma no plugin. Agora você pode obter qualquer avatar usando https://forum.example.com/rocketchat/avatar/{username}.png, independentemente de ser um Gravatar, uma imagem carregada ou uma letra.

5 curtidas

Isso parece ótimo! Infelizmente, meu cabeçalho desaparece quando ativo isso. Alguma ideia do porquê?

1 curtida

Hmmm… você está usando uma quantidade enorme de componentes de tema, o que torna difícil depurar sem acesso direto.

Percebi que estava usando uma classe sem prefixo (.collapsible), que provavelmente causaria conflito, então agora adicionei um prefixo a ela.

2 curtidas

Obrigado, Richard. Infelizmente, isso não funcionou. Também tentei instalar em um dos meus outros sites, desativei todos os plugins e TCs, e o problema continua, como você pode ver aqui: Exploring Exposure - Exploring Exposure Discussions.

2 curtidas

Acabei de perceber que desenvolvi e testei este plugin apenas contra a branch stable. O plugin está gerando um erro e travando na versão 2.8.x. Vou investigar e corrigir isso. Obrigado pelo seu relatório!

@davidkingham Corrigi o problema. Poderia, por favor, reconstruir e testar novamente?

4 curtidas

Muito obrigado por este plugin, é incrivelmente útil!

Apenas 2 coisas:

  • Por enquanto, estou apenas testando a parte de incorporação de chat da integração.
    A função SSO do plugin permite uma integração perfeita com o login automático ou o usuário ainda precisa clicar no botão de login SSO para entrar (sem precisar digitar nenhuma senha) no Rocket.Chat?
    No momento, estou enfrentando esse problema com a integração SSO entre o Rocket.Chat e o Nextcloud e, até agora, não consegui encontrar uma maneira de fazer o login automático no Rocket.Chat sem precisar clicar no botão SSO.

  • Seria possível configurar o chat incorporado para abrir na página inicial do Rocket.Chat e não em um canal padrão?
    No momento, a única opção é definir um canal padrão, mas ter o chat incorporado abrindo também na página inicial personalizável do Rocket.Chat seria muito útil.
    (Abrei uma issue sobre isso no repositório do GitHub aqui, espero que não incomode ninguém).

Muito obrigado novamente pela sua preciosa contribuição!

1 curtida

Essa solução é utilizada no phpfox, chamada ChatPlus. Lá, você pode transferir todas as mensagens do chat antigo para o Rocket Chat. Você planeja adicionar um recurso assim?

A qual “chat antigo” você está se referindo? Isso parece mais uma funcionalidade do Rocket.Chat do que do Discourse? Ou estou entendendo errado?

Configure este script como “Script Personalizado para Usuários Desconectados” no Rocket.Chat (certifique-se de substituir o nome do host pelo nome do seu fórum na segunda linha). Nota: Não testei isso recentemente. Não tenho certeza se posso ajudá-lo caso não funcione.

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

Vou investigar isso em algumas semanas. Vou manter a issue no Github aberta para me lembrar.

O phpfox possui uma função para transferir todas as mensagens antigas do chat nativo para o Rocket.Chat (ChatPlus). Seria possível fazer isso no Discourse, de modo que apenas o Rocket.Chat possa ser usado como chat? Assim, todas as mensagens antigas não seriam perdidas e esse plugin poderia ser utilizado em fóruns antigos que já possuem muitas mensagens.

O Discourse não possui um chat nativo, então de onde viriam essas mensagens?
Além disso, a ideia por trás de um chat (em oposição a um fórum) é que as mensagens de chat são mais voláteis.

1 curtida

Quero dizer mensagens privadas.

Ah, entendi. Nesse caso, não.
Não tenho certeza se isso é realmente um problema, já que ativar o plugin do Rocket.Chat ainda permite isso, mesmo ao desativar as mensagens privadas:

2 curtidas

Muito obrigado pela sua resposta muito informativa.
Já havia visto o script que você postou aqui, mas pensei que ele fosse válido apenas para autenticação CAS e não para SSO. Vou testá-lo e verificar se a janela oculta não será bloqueada pelo navegador.

Muito obrigado! Na minha opinião, poder definir a página inicial também na janela de chat incorporada seria uma adição muito interessante. Estou ansioso para vê-la implementada eventualmente, caso você encontre recursos para dedicar um tempo a isso. Obrigado por considerar adicionar essa opção.

Obrigado pela resposta. Será possível usar o Mattermost ou o MongooseIM para o chat em vez do Rocket.Chat? O Mattermost é escrito em Go e consome menos recursos, sendo mais escalável. Ou isso só é possível com o Rocket.Chat?

Não, este é um plugin do Rocket.Chat para o Discourse…

O plugin utiliza o protocolo CAS 2.0 para estabelecer a funcionalidade de SSO.

É possível redesenhar o chat para se ajustar ao fórum? Isso pode ser feito com CSS? Obrigado.

Isso responde à sua pergunta? https://developer.rocket.chat/guides/developer/ui-and-theming

1 curtida