Fluux XMPP est une bibliothèque go xmpp , axée sur la simplicité, l'automatisation simple et l'IoT.
L'objectif est de simplifier l'écriture de clients et de composants XMPP simples :
La bibliothèque est conçue pour avoir un minimum de dépendances. Actuellement, il nécessite au moins Go 1.13.
Il n'est pas recommandé de désactiver la vérification du nom de domaine et de la chaîne de certificat. Cela exposerait votre client à des attaques de l'homme du milieu.
Cependant, en développement, les serveurs XMPP utilisent souvent des certificats auto-signés. Dans cette situation, il est préférable d’ajouter l’autorité de certification racine qui a signé le certificat à votre liste d’autorités de certification racine de confiance. Cela évite de changer le code et limite le risque d’envoyer un client non sécurisé en production.
Cela dit, si vous souhaitez vraiment permettre à votre client de faire confiance à n'importe quel certificat TLS, vous pouvez personnaliser le standard Go tls.Config
et le définir dans la structure Config.
Voici un exemple de code pour configurer un client afin d'autoriser la connexion à un serveur avec un certificat auto-signé. Notez l'option InsecureSkipVerify
. Lors de l'utilisation de cette option tls.Config
, toutes les vérifications sur le certificat sont ignorées.
config := xmpp. Config {
Address : "localhost:5222" ,
Jid : "test@localhost" ,
Credential : xmpp . Password ( "Test" ),
TLSConfig : tls. Config { InsecureSkipVerify : true },
}
Les strophes XMPP sont des éléments XML basiques et extensibles. Les strophes (ou parfois des strophes spéciales appelées « nonzas ») sont utilisées pour exploiter les fonctionnalités du protocole XMPP. Au cours d'une session, un client (ou un composant) et un serveur échangeront des strophes dans les deux sens.
À bas niveau, les strophes sont des fragments XML. Cependant, la bibliothèque Fluux XMPP fournit les éléments de base pour interagir avec les strophes à un niveau élevé, fournissant une API conviviale pour Go.
Le sous-package stanza
prend en charge l'analyse, le marshalling et le démarshalling du flux XMPP de la strophe XMPP. Il s'agit d'un pont entre la structure Go de haut niveau et le protocole XMPP de bas niveau.
L'analyse, le marshalling et le unmarshalling sont automatiquement gérés par la bibliothèque client Fluux XMPP. En tant que développeur, vous manipulerez généralement uniquement les structures de haut niveau fournies par le package de strophes.
Le protocole XMPP, comme son nom l'indique, est extensible. Si votre application utilise des extensions de strophe personnalisées, vous pouvez implémenter vos propres extensions directement dans votre propre application.
Pour en savoir plus sur le package de strophes, vous pouvez en savoir plus dans la documentation du package de strophes.
FAIRE
FAIRE
Nous avons plusieurs exemples pour vous aider à démarrer avec la bibliothèque Fluux XMPP.
Voici le client de démonstration "echo":
package main
import (
"fmt"
"log"
"os"
"gosrc.io/xmpp"
"gosrc.io/xmpp/stanza"
)
func main () {
config := xmpp. Config {
TransportConfiguration : xmpp. TransportConfiguration {
Address : "localhost:5222" ,
},
Jid : "test@localhost" ,
Credential : xmpp . Password ( "test" ),
StreamLogger : os . Stdout ,
Insecure : true ,
// TLSConfig: tls.Config{InsecureSkipVerify: true},
}
router := xmpp . NewRouter ()
router . HandleFunc ( "message" , handleMessage )
client , err := xmpp . NewClient ( config , router , errorHandler )
if err != nil {
log . Fatalf ( "%+v" , err )
}
// If you pass the client to a connection manager, it will handle the reconnect policy
// for you automatically.
cm := xmpp . NewStreamManager ( client , nil )
log . Fatal ( cm . Run ())
}
func handleMessage ( s xmpp. Sender , p stanza. Packet ) {
msg , ok := p .(stanza. Message )
if ! ok {
_ , _ = fmt . Fprintf ( os . Stdout , "Ignoring packet: %T n " , p )
return
}
_ , _ = fmt . Fprintf ( os . Stdout , "Body = %s - from = %s n " , msg . Body , msg . From )
reply := stanza. Message { Attrs : stanza. Attrs { To : msg . From }, Body : msg . Body }
_ = s . Send ( reply )
}
func errorHandler ( err error ) {
fmt . Println ( err . Error ())
}
La documentation du code est disponible sur GoDoc : gosrc.io/xmpp