Skip to content
Snippets Groups Projects
Commit 337ca926 authored by Alexis POYEN's avatar Alexis POYEN
Browse files

Init README.md

parent 553818ff
No related branches found
No related tags found
No related merge requests found
Pipeline #6409 passed
# Elections
Application de rencensement et affichage des résultats d'élections
\ No newline at end of file
[![Quality Gate Status](https://sonarqube.forge.grandlyon.com/api/project_badges/measure?project=elections&metric=alert_status)](https://sonarqube.forge.grandlyon.com/dashboard?id=elections)[![Reliability Rating](https://sonarqube.forge.grandlyon.com/api/project_badges/measure?project=elections&metric=reliability_rating)](https://sonarqube.forge.grandlyon.com/dashboard?id=elections)[![Security Rating](https://sonarqube.forge.grandlyon.com/api/project_badges/measure?project=elections&metric=security_rating)](https://sonarqube.forge.grandlyon.com/dashboard?id=elections)[![Technical Debt](https://sonarqube.forge.grandlyon.com/api/project_badges/measure?project=elections&metric=sqale_index)](https://sonarqube.forge.grandlyon.com/dashboard?id=elections)[![Vulnerabilities](https://sonarqube.forge.grandlyon.com/api/project_badges/measure?project=elections&metric=vulnerabilities)](https://sonarqube.forge.grandlyon.com/dashboard?id=elections)
## Fonctionnalités
## Démarrage pour tests / dev
### Identifiants de démonstration
Trois comptes de démonstrations permettent de tester l'application avec trois profils différent : `admin` (rôle d'administrateur), `capturer` (rôle de saisisseur), et `visualizer` (rôle de visualiseur). Ces trois comptes ont pour mot de passe `password`
### Avec VS Code
> Il est nécessaire d'avoir un environnement de développement GO installé et opérationnel sur le poste.
Télécharger le dépot
```sh
git clone https://forge.grandlyon.com/apoyen/elections.git
```
Ouvrir le dépôt avec VS Code puis dans l'onglet `Debug`, démarrer le projet avec `Debug elections with Mock OAuth2`
La démo est accessible avec l'url https://elections.127.0.0.1.nip.io:1443
### Avec Docker
Installer sur le poste [Docker](https://docs.docker.com/get-docker/) et [docker-compose](https://docs.docker.com/compose/install/)
Télécharger le dépot
```sh
git clone https://forge.grandlyon.com/apoyen/elections.git
cd elections
```
Dans le fichier docker-compose.yml décommenter la ligne `command: -debug` (ATTENTION : cette ligne doit être commentée lors d'un passage en prod et ne sert que pour tester ou débuger l'application)
```sh
docker-compose up -d
```
La démo est accessible avec l'url https://elections.127.0.0.1.nip.io
## Architecture
### Arborescence fichier
- `./data` contient les bases de données locales sqlite, users.db pour les utilisateurs et test.db pour le modèle de donnée
- `./dev-certificates` contient les fichiers nécessaires pour servir l'application en HTTPS durant le développement.
- `./internal` contient les paquets nécessaires au développement de l'application
- `./auth` contient la gestion des utilisateurs et des droits sur l'application
- `./mocks` permet de mocker l'API d'authentification pour passer les tests
- `./models` permet de définir le modèle de données et les API qui seront servies par le back-end
- `./rootmux` contient le fichier `rootmux.go` qui permet de servir les APIs, de gérer l'authentification, de servir le site web et la gestion des cookies utilisateurs. Le répertoire contient également tous les tests d'intégration sur les APIs.
- `./miscellaneous/keycloack` contient un environnement Keycloack qui peut être utilisé pour déployer un environnement OAuth2
- `./web` est le répertoire où est stocké l'application front-end en JavaScript natif et avec le framework CSS Bulma publié par le serveur back-end.
### Utilisateurs et droits
**Utilisateurs techniques**
Les utilisateurs techniques permettent de s'authentifier à l'application et d'accéder aux API en fonction du rôle de l'utilisateur qui définit alors ses droits.
La source de création et d'authentification des utilisateurs technique est double. Elle peut soit provenir directement de la base de donnée locale d'utilisateurs de l'application (./data/users.db) ou d'un fournisseur d'identité avec le protocole OAuth2.
Dans le cas d'une connexion avec OAuth2, l'utilisateur est crée dans la base locale d'utilisateurs avec son identifiant OAuth2 qui permet de faire le lien avec l'utilisateur technique. Dans le cas d'une connexion avec OAuth2, l'utilisateur doit obligatoirement faire parti d'un groupe applicatif autorisé (cf variable d'envrionnement ADMIN_GROUP et VISUALIZER_GROUP) Un rôle différent est attribué automatiquement à l'utilisateur en fonction de son groupe.
> ATTENTION : le rôle "ADMIN" est obligatoire dans l'application car permet de gérer les utilisateurs et leurs droits. Sans celui-ci est sans utilisateurs ayant ce rôle dans la base, il est impossible de créer de nouveaux utilisateurs !
**Utilisateurs applicatif**
Les utilisateurs applicatifs sont créé dans la base locale de données (./data/test.db) avec l'identifiant de l'utilisateur technique qui permet de faire la jointure entre un utilisateur applicatif et un utilisateur technique.
Les utilisateurs techniques sont :
- les administrateurs `admin` qui créent le modèle de donnée des élections, valident les votes et crée les utilisateurs en leur affectant des droits.
- les saisisseurs `capturer` qui peuvent saisir les résultats des bureaux de votes qui leurs sont affectés
- les visualiseurs `visualizer` qui peuvent simplement consulter les résultats
### Tests
**Tests unitaires**
Les tests unitaires sont définis dans le répertoire de chaque paquet (ex : `auth_test.go` dans le package `auth`)
**Tests d'intégration**
Les tests d'intégration sont dans le répertoire `./rootmux`.
Les tests métiers (ex : marqué un bureau de vote comme complété lorsque tous les votes ont étaient saisis pour ce bureau) sont définis dans le fichier `rootmux_test.go`.
Les tests concernant les droits et les réponses attendues par utilisateur (ex : un saisisseur ne peut saisir les votes que des bureaux qui lui sont rattachés et pas aux autres) sont écrits dans des fichiers différent par type de droits différent (ex : `capturer_test.go` pour tester les droits des saisisseurs)
## Contribution
Un bug découvert ? Une demande d'amélioration ? Une contribution à la documentation ?
Utilisé le système d'issue pour expliquer votre découverte ou votre poposition.
Vous voulez contribuez directement au code ?
Créer une issue pour expliquer votre contribution, créer une branche à partir de cette issue, développer votre fonctionnalité sur la branche et faite une merge request.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment