Ecobot XMPP
Você conhece aquela situação, você realmente precisa de um bot de eco XMPP, mas não tem acesso a ferramentas de alto nível como Python para escrever um? Tudo que você tem é openssl, bash, dig, stdbuf e sed? Então esta ferramenta é para você.
Este é um bot de eco XMPP escrito (principalmente) em sed. Bash é usado para fazer a configuração de pré-autenticação (procurar registros DNS, estabelecer TLS via openssl s_client
). sed processa o fluxo XML e lida com toda a interação com o servidor no nível XMPP. Sim, isso analisa XML em sed.
Testado para funcionar no Prosody 0.9.
Uso
./echoz.sh usuário@domínio senha
Recursos suportados
- Mensagens não registradas
- XEP-0092 (versão do software)
- XEP-0199 (ping XMPP)
Depoimentos
- Isso é uma loucura, ainda não bati! -Matthew Wild
- Estou com medo. Faltam apenas dois passos para ganhar consciência. - Georg Lukas
- Estou simultaneamente chocado e pasmo. uau - Lance
- Com o Echoz.sed, conseguimos reduzir os custos do servidor XMPP Echo em 90% em comparação com nossa solução anterior baseada em TeX. -Leão
- Embora simples e limitado, o sed é suficientemente poderoso para um grande número de finalidades. - Wikipédia
- oh meu Deus, isso realmente funciona - Teste
Detalhes de implementação
- Usamos
tr
para converter >
para n
- como sed é baseado em linha (ou NUL), não há outra maneira de analisar XML XMPP (que geralmente nunca contém novas linhas) com sed. - O TLS é tratado fora do sed por motivos semelhantes. E para manter minha sanidade (algumas pessoas podem questionar se ainda me resta um pouco de sanidade).
- Da mesma forma, a pesquisa SRV e a composição dos dados de autenticação são inteiramente tratadas no bash. Isso também significa que apenas a autenticação PLAIN SASL é suportada - SCRAM requer um nível de interatividade que seria extremamente difícil de alcançar no sed (embora não impossível; teríamos "apenas" que implementar base64 e sha1-hmac no sed).
- Como o XMPP é um protocolo onde o cliente fala primeiro, precisamos entregar ao sed alguma entrada inicial para permitir que ele gere uma "linha" de saída (o cabeçalho do stream). Fazemos isso com o bash e aproveitamos essa oportunidade para passar alguma configuração para o programa sed (ou seja, JID e string de autenticação).
Considerações de projeto
- Consideramos usar
xml2
para converter o fluxo XML em eventos; no entanto, acontece que 2xm[
não gosta de redefinições de fluxo. Além disso, usar a abordagem tr
também nos permite detectar o final dos elementos, o que é útil para diversos fins.