---
# System prepended metadata

title: La nuit de l'info - Équipe PDO

---

# La nuit de l'info - Équipe PDO

TL;DR

L'application est accessible à https://app.ndl.thomasgouveia.fr
Les sources sont disponibles sur https://github.com/pdo-ndl-2022
Le CMS pour les articles: 
- url : https://learning.ndl.thomasgouveia.fr/admin
- login : kalil.pelissier@etu.umontpellier.fr | password : 4?rKj7SBMF!T4sSz


```
Fonctionnalités :

- Connexion et inscription au travers de GitHub;
- Connexion et inscription au travers de Google;
- Vérification des signatures JWT des utilisateurs lors de requêtes API;
- Hébergement dans un cluster Kubernetes (Google Kubernetes Engine)
- Sécurisation du réseau interne du cluster Kubernetes avec du mTLS
- Déploiement totalement automatisé (CI/CD) pour toutes les applications
- Utilisation de Git et de GitHub
- Provision de l'infrastructure automatisé
```

## Contexte

L'objectif de cette application est double : 

- mettre à disposition au même endroit des articles permettant de sensibiliser les jeunes adultes sur le sujet de la sexualité (maladies sexuellement transmissibles, moyens de contraception, les bons réflexes...)
- proposer des activités ludiques pour présenter ces sujets au travers de quiz rapportant des points permettant d'apparaître sur un classement général 


## Fonctionnalités


### Articles de sensibilisation

Dans un cadre de sensibilisation et au vu de l'évolution des MST chez les étudiants, il important de prévenir afin de diminuer leur transmission. 
C'est pourquoi nous avons décidé d'intégrer dans notre application des articles de sensibilisation au bien-être sexuel et de prévention contre les maladies et infections sexuellement transmissibles. 
Tout en offrant la possiblité aux administrateurs d'approvisionner du contenu dans le futur, grâce au CMS strapi

### Serious game

Le format choisi pour le thème de cette année est un serious game. Pour illustrer ce format nous avons choisi de combiner des vidéos et documents d'information avec des quizz. En utilisant cette combinaison, nous avions pour projet d'éduquer les visiteurs et de leur permettre de tester leurs compétences au travers de quizz. 

Nous avons conscience que les quizz ne sont pas les formats les plus intéressants pour les utilisateurs, c'est pour cette raison que nous avons ajouté de la gamification avec cette fonctionnalité. En effet, nous avons ajouté un système de points pour récompenser l'utilisateur lorsqu'il réussit à répondre correctement aux questions. Grâce à cela, nous avons aussi ajouté un système de classement des utilisateurs, ce qui permet d'inciter les utilisateurs à faire des quizz.

### Hébergement et Kubernetes 

Nos infrastructures sont hébergées sur Google Cloud Platform. Nous avons à la fois des Compute Engine (unités de calcul), des bases de données (PostgreSQL) et un cluster Kubernetes (Google Kubernetes Engine). Kubernetes était un choix naturel par rapport à nos compétences, il était de même pour le cloud provider.

### Zero-trust everywhere

Le Zero-Trust se divise par la sécurisation de plusieurs segments du système d'information. Le premier segment abordera la mise en place de l'authentification et du système d'autorisation. Le second segment expliquera la mise en place du Zero-Trust dans l'infrastructure cloud. 

**Authentification et Autorisation**

Afin de simplifier au maximum la mise en place d'un système d'utilisateur, nous avons choisi d'utiliser le fournisseur d'identité Auth0. Il permet de faire de l'OIDC avec Google et GitHub. 

![](https://i.imgur.com/qNcrCDD.png)

Le schéma ci-dessus représente comment l'authentification fonctionne, les données ne circulent pas sur nos applications, mais uniquement sur Auth0.
Les tokens d'information et d'accès sont signés et ensuite transférés dans la requête lorsque l'utilisateur revient sur la page.

![](https://i.imgur.com/69ygXDG.png)

Le schéma ci-dessus représente comment les tokens sont vérifiés lorsqu'on fait un appel vers une API. 

**Zero-Trust dans l'infrastructure cloud**

La protection des services entre-eux dans une infrastructure est une nécéssité pour atteindre un modèle Zero-Trust. Nous avons cherché à atteindre ce modèle là. Pour se faire nous avons utilisé des solutions de Hashicorp: [Vault](https://www.vaultproject.io/) and [Consul](https://www.consul.io/). 

![](https://i.imgur.com/eF59xtx.png)

Les services Vault et Consul sont hébergés dans le cloud, dans les infrastructures de Hashicorp. Cela permet d'assurer une résilience et une fiabilité pour la gestion du control plane et de la communication des services interne. De cette manière les communications en interne peuvent être chiffrées, afin de se conforter au modèle Zero-Trust. En effet, d'une part Vault permet de stocker des clés de chiffrement et de faire de la rotation de ces dernières et d'autre part, Consul, est un service mesh qui permet de faire le chiffrement des communications. Consul travaille étroitement avec Vault pour garantir un haut niveau de sécurité. En si peu de temps, nous n'avons pas réussir à atteindre notre objectif de [mTLS](https://www.cloudflare.com/learning/access-management/what-is-mutual-tls/), mais un début de solution est disponible. 

Pour ces raisons, nous n'avons pas de trace et d'analyses des communications réseau, nous aurions pu utiliser des librairies comme OpenTelemetry, Jaeger ou bien d'autres pour tracer les communications, cependant nous n'avons pas juger utile de le faire puisque nous continuons sur Consul. 

Pour contrôler ces installations, nous utilisons Terraform, outil reconnu pour la provision d'infrastructure. Cela permet d'avoir des procédures d'installations idempotentes. 

![](https://i.imgur.com/75fuG6D.png)
*Interface de Hashicorp Cloud pour contrôler Consul*

![](https://i.imgur.com/aOOn6oF.png)
*Interface de Google Cloud Platform qui héberge Vault*

Nous considérons aussi qu'une part du Zero-Trust demande aussi un chiffrement des communications de l'extérieurs, nous utilisons Let's encrypt pour générer des certificats sur toutes nos applications.

La majeure partie du code source est disponible sur [GitHub](https://github.com/pdo-ndl-2022/infrastructure) dans le dépôt Infrastructure, une partie est omise pour des raisons de simplicité (e.g le provisioning de Consul dans le cloud).

### CI/CD

Pour l'intégration continue, chaque repository git a des github actions qui lancent les test, et buildent les images docker et les poussent sur un registry github. 

Pour le continuous delivery, nous avons déployé [argoCD](https://argo-cd.readthedocs.io/en/stable/) sur notre cluster kubernetes.



### Provision de l'infrastructure 

## Défi UX immonde alias la pire bannière de cookies

URL live : https://app.ndl.thomasgouveia.fr

Repo git : https://github.com/pdo-ndl-2022/frontend

Le défi de la "mauvaise interface" est implementé au niveau de la banière de consentement des cookies. Le but consiste à refuser les cookies et à ne jamais les accepter. Elle apparait une fois que l'utilisateur a passé le service de connexion.

Nous avons opté pour des designs qui visent à frustrer les utilisateurs (dark pattern), mais qui sont assez originaux pour qu'ils puissent y trouver un peu d'amusement à la situation. 

L'idée est donc de faire perdre un maximum de temps à l'utilisateur, tout en rendant chaque étapes possible. Le niveau de chaque étape est croissant. Il y a trois étapes. Bon courage à ceux qui le testeront!
