Aidants Connect est une application web qui propose à des aidants les fonctionnalités suivantes :
- créer un mandat de connexion via FranceConnect avec un ou plusieurs usagers sur un périmètre et une durée définis ;
- connecter via FranceConnect un usager dans les conditions des mandats créés ;
- accéder à des ressources sur l'accompagnement des usagers ;
- accéder à un suivi de ses mandats.
- Python 3.7
- Django 3.0
- PostgreSQL
Utilisez votre gestionnaire de paquets préféré pour installer la base.
L'exemple qui suit emploie le gestionnaire Homebrew via la commande brew
.
Dans un terminal, installez PostgreSQL :
brew install postgresql
Démarrez le service postgresql :
brew services start postgresql
Ceci démarre le serveur de la base de données et active sa réexécution au login.
Dans le cas où ce serait votre première utilisation de PostgreSQL, créez une base d'essai à votre nom :
createdb `whoami`
Puis, démarrez l'invite de commande PostgreSQL :
psql
Vous pouvez dès à présent visualiser :
- la liste des bases de données existantes avec cette commande PostgreSQL
\list
- la liste des roles existants avec
\du
Ajoutez une base aidants_connect
appartenant au nouvel utilisateur aidants_connect_team
en poursuivant dans l'invite de commmande PostgreSQL :
CREATE USER aidants_connect_team;
CREATE DATABASE aidants_connect OWNER aidants_connect_team;
ALTER USER aidants_connect_team CREATEDB;
🎉 La base de donnée aidants_connect
est installée. Vous pouvez la voir et quitter l'invite de commande avec :
\list
\q
Dans votre répertoire de travail, créez et activez un environnement virtuel :
virtualenv venv
source venv/bin/activate
Installez les dépendances :
pip install -r requirements.txt
Si la commande précédente déclenche le message d'erreur suivant ld: library not found for -lssl
, essayez :
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/
Dupliquez le fichier .env.example
à la racine du projet en tant que .env
et ajoutez vos informations :
- Les champs obligatoires sont indiqués par le préfixe
<insert_
- Les informations
FC_AS_FS
etFC_AS_FI
sont à récupérer via des habilitations FranceConnect - Les valeur de sécurité sont issues de https://docs.djangoproject.com/fr/2.2/topics/security/ et de https://www.youtube.com/watch?v=gvQW1vVNohg
Créez un répertoire staticfiles
à la racine du projet :
mkdir staticfiles
Appliquez les migrations de la base de données :
python manage.py migrate
Créez un superuser :
python manage.py createsuperuser --username <insert_admin_name>
Adjoignez-lui une Organisation
:
python manage.py shell
from aidants_connect_web.models import Aidant, Organisation
a = Aidant.objects.get(pk=1)
a.organisation = Organisation.objects.create(name=<insert_organisation_name>)
exit()
Si vous ne les avez pas, installez les éléments suivants :
- Navigateur Firefox en téléchargement
- Gecko driver avec cette commande :
brew install geckodriver
Puis lancez les commandes suivantes pour vérifier le style du code source et exécuter les tests de l'application :
flake8
python manage.py test
Les tests fonctionnels sont lancés sur http://localhost:3000
.
Il faut s'assurer que rien d'autre n'occupe ce port pendant leur exécution.
Par défaut, les tests d'intégration sont lancés en mode headless, c'est-à-dire sans ouverture de fenêtre de navigateur. Si vous souhaitez modifier ce comportement, vous pouvez modifier la valeur de la variable d'environnement HEADLESS_FUNCTIONAL_TESTS
dans votre fichier .env
.
Dans de rares cas (comportement observé à ce jour sur une seule machine de dev), les tests d'intégration échouent car la première connexion à une URL via l'API Selenium plante de manière inexpliquée. Un contournement empirique a été mis en place ; si vous rencontrez ce problème vous pouvez l'activer en passant à True
la variable d'environnement BYPASS_FIRST_LIVESERVER_CONNECTION
dans votre fichier .env
.
Pour lancer l'application sur le port 3000
:
python manage.py runserver 3000
Pour pouvoir vous connecter à votre instance locale, il faut apparier à votre superuser
un dispositif TOTP (TOTP device
).
Pour cela, commencez par lui adjoindre un jeton OTP statique :
python manage.py addstatictoken <insert_admin_name> -t <insert_6_numbers>
Le jeton généré vous permet de vous connecter une seule fois à l'interface d'administration Django, disponible par défaut à l'URL http://localhost:3000/admin/
.
En cas de problème, pas d'inquiétude : vous pouvez répéter la procédure précédente autant que nécessaire :)
Ceci fait, cliquez sur TOTP devices, puis sur le bouton Ajouter TOTP device +.
Choisissez votre superuser
grâce à l'icône "loupe" située à côté du champ User, puis saisissez un nom pour votre dispositif TOTP (par exemple : Mon téléphone) dans le champ Name.
Cliquez ensuite sur Enregistrer et continuer les modifications tout en bas du formulaire.
Une fois l'enregistrement effectué, l'écran devrait se rafraîchir et vous proposer un lien vers un QR Code. Vous pouvez à présent scanner celui-ci dans une application TOTP telle que Authy ou Google Authenticator pour utiliser l'authentification à double facteur dans votre environnement local.
Il faut d'abord avoir correctement installé l'application.
Installez les git hooks :
pre-commit install
Si vous avez des données existantes, vous pouvez d'abord les sauvegarder :
python manage.py dumpdata --exclude auth.permission --exclude contenttypes > db.json
Puis il vous faudra recréer la base de donnée PostgreSQL :
-
Dans le shell :
psql
-
Puis, dans l'invite de commande
psql
:DROP DATABASE aidants_connect; CREATE DATABASE aidants_connect OWNER aidants_connect_team; ALTER USER aidants_connect_team CREATEDB; \q
Ensuite, de retour dans le shell, pour lancer les migrations :
python manage.py migrate
Enfin, chargez les données :
-
Soit des données sauvegardées précédement :
python manage.py loaddata db.json
-
Soit des données de test qui créent aussi un superuser rattaché à une
Organisation
BetaGouv
:- identifiant :
admin@email.com
; - mot de passe :
admin
; - Static OTP :
111111
.
python manage.py loaddata admin.json python manage.py loaddata usager_autorisation.json
- identifiant :
-
Soit repartir de zéro en recréant un superuser (plus de détails dans la section Installer l'application) :
python manage.py createsuperuser
Les objets Django de type Connection
repésentent une forme de cache pendant l'établissement de la connexion FranceConnect.
À ce titre, ils contiennent des données personnelles et doivent donc être purgés régulièrement pour respecter nos engagements en la matière.
Pour ce faire, il suffit d'exécuter ou de planifier la commande suivante :
python manage.py delete_expired_connections