Skip to content

Présentation

Le projet exemple est une application web de chat dans laquelle le Seald-SDK est intégré pour ajouter du chiffrement de bout-en-bout.

Ce projet est disponible sur Github :

shell
git clone https://github.com/seald/sdk-example-project.git
git clone https://github.com/seald/sdk-example-project.git

Il est subdivisé en plusieurs branches successives qui présentent chacune une étape différente de l'intégration. Des guides décrivant pas-à-pas comment l'implémenter à partir de la version précédente sont disponibles :

ÉtapeDescriptionRésultat finalBranche de base
Démarrage rapideIntégration basique du Seald-SDK avec une protection par mot de passe1-quick-startmaster
Pré-dérivation du mot de passeImplémente une pré-dérivation du mot de passe d'authentification2-pre-derivation1-quick-start
Mise en cache de l'identité en localstorageImplémente une mise en cache de l'identité dans le localstorage3-localstorage2-pre-derivation
Protection en 2-man-ruleRemplacement de la protection par mot de passe par une protection en 2-man-rule4-two-man-rule3-localstorage
Utilisation du 2-man-rule par SMSEn 2-man-rule, remplacement de la protection par email par la protection par SMS5-two-man-rule-sms4-two-man-rule

WARNING

Il s'agit d'une application de démonstration destinée exclusivement à présenter l'intégration du Seald-SDK. D'autres considérations — incluant de sécurité — n'ayant pas été prises en compte, nous vous recommandons de ne pas l'utiliser tel quel.

Fonctionnalités

L'application de chat permet à des utilisateurs de :

  • se créer un compte ;
  • se connecter par mot de passe ;
  • envoyer des messages en privé à n'importe quel autre utilisateur ;
  • créer & administrer un salon de chat ;
  • envoyer des messages dans un salon de chat.

Lancement

Il s'agit d'une application web en deux parties :

  • un backend dans le dossier ./backend implémenté en Node.js, avec Express & socket.io. Il est connecté à une base de données SQL (SQLite ou Postgres) avec Sequelize comme ORM ;
  • un frontend dans le dossier ./frontend implémenté en React.js en utilisant @material-ui comme bibliothèque d'UI.

Pour installer les dépendances, il suffit de lancer npm install dans les deux dossiers frontend et backend.

Configuration

Front-end

La configuration du projet s'effectue par un fichier de configuration settings.json.

Celui-ci doit être placé dans le dossier racine du serveur web (en mode développement, dans le dossier /frontend/public/).

Vous trouverez dans chaque branche un fichier settings.example.json, qui est un modèle du fichier settings.json que vous pouvez copier/coller. Vous devrez modifier les valeurs par les véritables paramètres.

Ce fichier contient les variables :

NomDescriptionDoit être défini dans les branches
APPLICATION_SALTSel utilisé pour la pré-dérivation2-pre-derivation, 3-localstorage
APP_IDApp ID (pour SSKS)Toutes
API_URLSeald API URLToutes
KEY_STORAGE_URLAPI URL (pour SSKS)4-two-man-rule, 5-two-man-rule-sms

Back-end

La configuration du projet s'effectue par un fichier de configuration settings.json.

Par défaut, celui-ci doit être placé à la racine du dossier /backend. Le chemin où l'application cherche ce fichier peut être modifié en mettant le chemin du fichier dans la variable d'environnement CONFIG_FILE.

Vous trouverez dans chaque branche un fichier settings.example.json, qui est un modèle du fichier settings.json que vous pouvez copier/coller. Vous devrez modifier les valeurs par les véritables paramètres.

Ce fichier contient les variables :

NomDescriptionDoit être défini dans les branches
HTTPS_ENABLEDDoit être activé si un reverse proxy implémente HTTPS en amont du serveur. L'attribut Secure sera ajouté aux cookies de session et Express fera confiance aux headers X-Forwarded-*Toutes
SESSION_SECRETSecret utilisé pour dériver les cookies de sessionToutes
JWT_SHARED_SECRET_IDID de la clé de validation (pour le JWT de licence)Toutes
JWT_SHARED_SECRETClé de validation (pour le JWT de licence)Toutes
APP_IDApp ID (pour SSKS)4-two-man-rule, 5-two-man-rule-sms
KEY_STORAGE_URLAPI URL (pour SSKS)4-two-man-rule, 5-two-man-rule-sms
KEY_STORAGE_APP_KEYClé d'application (pour SSKS)4-two-man-rule, 5-two-man-rule-sms

Lancement local

L'application peut être lancée en local en démarrant :

  • le backend avec la commande npm start dans le dossier backend ;
  • le frontend avec la commande npm start dans le dossier frontend.

TIP

Si le backend ou le frontend ne se lance pas correctement, vérifiez que vous avez bien créé le fichier de configuration correspondant, et que vous l'avez correctement rempli.

Un fichier database.sqlite sera automatiquement créé dans le dossier backend, et cela ouvrira deux serveurs :

  • sur le port 4000 pour l'API ;
  • sur le port 3000 qui sert le frontend et agit comme reverse proxy vers l'autre serveur.
Fonctionnement du watch

Le backend est lancé à l'aide de nodemon qui le relance dès qu'il y a une modification dans le code du backend.

Le frontend utilise le serveur de développement de react-scripts et dispose aussi d'une fonctionnalité de watch.

TIP

Si vous modifiez les modèles Sequelize, il se peut que vous deviez supprimer le fichier de base de données si les modifications ne sont pas compatibles.

Déploiement

L'application peut également être déployée en utilisant Docker-Compose :

bash
docker-compose up -d --build
docker-compose up -d --build

Cela va:

  • construire et lancer une image pour le backend à partir de backend/Dockerfile qui est basée du node:14 et lance le serveur sur le port 4000;
  • construire et lancer une image pour le frontend à partir de frontend/Dockerfile qui build le frontend et le sert statiquement avec nginx, qui agit comme reverse proxy du backend.
  • lancer une image postgres.

TIP

En production, vous devriez définir la variable d'environnement NODE_ENV à "production", pour lancer le serveur express en mode production.