Un module Go pour faciliter le développement d'application respectueuse de la vie privée

·

3 min read

Il y a quelques semaines, nous avons publié le NymSocketManager, un module en Go qui vise à faciliter le dévelopment des applications qui veulent utiliser le Mixnet de Nym en faisant abstraction des éléments liés à la communication réseau.

Un peu de contexte

Nym propose actuellement deux SDK (Software Development Kit): un en Rust et un en Typescript. Les programmes qui utilisent ces SDK communique directement avec le mixnet et n'ont pas besoin de passer par un nym-client, via des web sockets. Cependant, chez NoTrustVerify, on aime bien écrire nos applications en Python ou en Go. Comme il n'y a pas (encore) de SDK pour ces langages, nous devons utiliser un nym-client externe pour échanger des messages avec d'autres acteurs à travers le mixnet. Comme la partie de code responsable de la connexion avec ce nym-client se répète souvent, nous avons développé ce module réseau pour modulariser notre code et faciliter le développement de d'applications. Ce module peut être toruvé sur notre repo Github.

Comment ça s'utilise?

Le module peut être ajouté à vos projets en lançant la commande suivante, depuis votre projet en Go:

go get -u github.com/notrustverify/nymsocketmanager

et en incluant le module dans votre comme cela:

import NymSocketManager "github.com/notrustverify/nymsocketmanager"

Dans votre projet, vous pouvez maintenant instancier un NymSocketManager comme suit:

nymSocketManager := NymSocketManager.NewNymSocketManager(NYM_CLIENT_WS, handlingFunction, logger)

avec les arguments suivnats:

  • NYM_CLIENT_WS: L'adresse du socket web du nym-client que votre programme utilisera. Par exemple: "ws://127.0.0.1:1977"

  • handlingFunction: Cette fonction sera appelée lors de la réception d'un nouveau message et va traiter ce message selon ce que vous voulez. C'est là que la logique de votre application va interagir avec le mixnet. handlingFunction doit avoir la signature suivante: func (NymSocketManager.NymReceived, func(NymSocketManager.NymMessage) error). Le premier argument est le message que votre application peut traiter et le second est une fonction que votre application peut appeler pour envoyer une réponse (ou d'autres messages) à travers le mixnet. N'hésitez pas à consulter notre repo pour voir les différents types de Nym messages que nous avons défini.

  • logger: finallement, un zerolog.Logger doit être fourni. Celui-ci permet d'enregistrer le comportement du NymSocketManager selon vos besoins (avec un niveau distinct de log, de les écrire dans un fichier, les envoyer à un aggrégateur de log,...).

Une fois que le nymSocketManager est défini, vous pouvez le lancer comme cela:

stoppedSocketManager, err := nymSocketManager.Start()
if nil != err {
    panic(err)
}

Où le premier paramètre retourné est un channel pour indiquer si la connexion du web socket est fermée (si le nym-client est mort par exemple), vous permettant de réagir à cet événement et prendre les mesures nécessaires (relancer le nym-client, libérer d'autres ressources, quitter le programme,...). L'autre paramètre permet d'indiquer si une erreur a eu lieu durant le démarrage du NymSocketManager.

Un NymSocketManager démarré va appeler la fonction handlingFunction fournie sur réception de messages depuis le mixnet. Vous pouvez également utiliser la fonction Send(msg NymSocketManager.NymMessage) error du NymSocketManager pour librement envoyer des messages (sans attendre d'en recevoir).

Le nymSocketManager peut être arrêté en appelant nymSocketManager.Stop(), ce qui fermera la connexion au mixnet et libérera les ressources associées.

De plus, notre module inclus un SocketManager traditionnel pour gérer la communication avec n'importe quel web socket.

Exemples

Nous avons inclus des exemples de code pour le NymSocketManager et le traditionnel SocketManager dans notre repo, dans le dossier « Examples » (ici). Vous pouvez également consulter notre dernière application qui utilise ce module: le proxy NostrNym, dont nous avons déjà parlé dans cet article.