Bonjour,
le projet « Cocorico » (la plateforme de vote) avance à vive allure, notamment en raison de son utilisation pour le 1er tour de LaPrimaire.org qui a commencé depuis le 25/10 ! Voilà donc un récapitulatif sommaire des changements apportés depuis le 6/10.
Merci à Yoann Aubineau pour ses contributions sur les « webhooks ».
Merci à Thibauld pour son travail d’intégration/test dans LaPrimaire.org.
1. Gestion des webhooks
Les plateformes tierces (ex : LaPrimaire.org) qui intègrent la plateforme de vote peuvent maintenant suivre le déroulé d’un vote sans se fier au navigateur de l’utilisateur. Les webhooks permettent une communication serveur/serveur entre Cocorico et la plateforme tierce.
2. Ajout d’un firewall
Le serveur limite maintenant l’accès aux seuls ports suivants :
- 8 (ping)
- 22 (ssh)
- 80 (http)
- 443 (https)
3. Support de Safari
Le navigateur Safari est maintenant supporté à partir de la version 9.1.
4. Meilleure sécurisation du smart contract de vote
Le smart contract (le code exécuté sur la blockchain) a été modifier pour gérer plusieurs états et permettre certaines actions en fonction de cet état :
-
open
: le vote est « ouvert », les fonctionsregisterVoter()
,vote()
etclose()
peuvent être appelées, la fonctiongetResults()
ne peut pas être appelée -
close
: le vote est « fermé », les fonctionsregisterVoter()
,vote()
etclose()
ne peuvent pas être appelées, la fonctiongetResults()
peut être appelée
En gros, on peut voter tant que le vote est « ouvert », mais pas avoir les résultats.
Et inversement quand le vote est « fermé ».
Pour des raisons de sécurité, on peut « fermer » un vote, mais pas le rouvrir.
Ceux sont des choix d’implémentation à débattre avec des implications énorme qui vont jusqu’à remettre en question la constitutionnalité du vote (rien que ça…).
Le smart contract a également été modifié pour mieux remonter les erreurs.
5. Réécriture du service d’inscription des bulletins de vote sur la blockchain
Ce service souffrait de nombreux défauts, qui pouvaient entraîner des bulletins de vote dans un état indéterminé. Le service a été entièrement réécrit pour être plus fiable et mieux tirer partie de l’architecture multi-processus.
La gestion des erreurs a également été améliorée et permet d’avoir un suivi de toutes les erreurs qui se sont manifestées lors du traitement d’un bulletin en particulier.
6. Traitement multi-processus des bulletins de vote
Les bulletins de vote ne sont plus gérés par un seul mais plusieurs processus. Chaque processus passant quasiment tout son temps à attendre/ne rien faire, cela n’a que peu d’impact sur les performances. Mais cela permet de distribuer le risque de panne.
Ces processus pourraient tourner sur des machines séparées, voir sur les machines de citoyens volontaires qui hébergeraient déjà la blockchain.
Il en est de même pour tous les autres services, comme les webhooks.
7. Résilience du service de traitement des bulletins de vote
Jusqu’ici, lorsque ce service plantait, il fallait le redémarrer à la main. Lorsqu’un des processus de traitement des bulletins tombe, il va automatiquement être relancé après 30 secondes.
Il en est de même pour tous les autres services, comme les webhooks.
8. Création d’un framework de test
Le code qui est en commun avec tous les différents tests (API, app, etc…) a été mis dans un package commun pour en augmenter la maintenabilité. Ce framework permet de tester toute la procédure de vote en simulant la création de votes et l’envoie d’un nombre donné de bulletins en 50 lignes de code.
9. Embryon de tests pour l’application Web
Début de travail sur l’automatisation du lancement et du pilotage d’un navigateur Web qui va aller tester l’application Web. Ces tests vont simuler l’utilisation de l’application Web dans des conditions quasi réelle (vrai navigateur, vrais clicks, vrai formulaires à remplir, etc…) mais piloté par du code pour tester la procédure de vote et en valider le bon déroulé.
Ces tests seront automatisés pour permettre de vérifier que chaque modification du code ne cause pas de régression sur la procédure de vote telle qu’elle sera suivie par les vrais utilisateurs.
10. Ajout de traductions
Certains éléments de l’interface - notamment les boutons pour imprimer/télécharger la preuve de vote - ont été traduits en français.
11. Nouvelles options de configuration de la blockchain
La configuration de la plateforme permet maintenant de déclarer la « target gas limit », une valeur qui permet d’influencer le nombre de transactions qui pourront être stockées dans un block de la blockchain. Augmenter cette valeur permet de traiter plus de transactions dans un même temps, et donc de mieux répondre aux problématiques de charge.
12. Configuration explicite de la langue/locale
Il est maintenant possible de forcer la locale utilisée en ajoutant le paramètre « lang » dans une URL (par exemple https://cocorico.cc/?lang=fr-FR pour forcer le français). La locale sélectionnée est alors enregistrée dans un cookie pour que la navigation reste cohérente tout le temps de la session.
13. Logs en JSON pour l’API Web
L’API Web écrit maintenant ses logs en JSON pour permettre l’automatisation de leur traitement. Ces logs sont également plus verbeux pour permettre un meilleur suivi du fonctionnement de l’API.
14. Configuration de déploiement extensible
La configuration de la plateforme peut maintenant être étendue/surchargée sans modifier la configuration principale. Cela permet par exemple de créer une/des instances privées/dédiées de la plateforme sans modifier la configuration originale. C’est ce qui a été utilisé pour déployer https://laprimaire.cocorico.cc.
Les configurations additionnelles peuvent ainsi être versionnées sur un dépôt séparé, notamment pour des raisons de confidentialité.
15. Automatisation du déploiement/renouvellement des certificats SSL
Le(s) certificat(s) SSL sont obtenus et renouvelés automatiquement grâce à let’s encrypt.
16. Correction d’un bug sur le nombre de propositions par vote
Un bug limitait le nombre de propositions (valeurs de bulletin) possibles pour chaque vote à 3. Ce bug a été résolu pour permettre par exemple à LaPrimaire.org d’implémenter le jugement majoritaire avec 5 propositions (« très bien », « bien », etc…).
17. Automatisation des backups
Il est maintenant possible d’automatiser le déploiement d’une machine qui sera dédiée au backup automatique des données de la plateforme. Cette sauvegarde intervient automatiquement toutes les heures de façon incrémentale. Il est donc possible de revenir à n’importe quelle date dans le temps, heure par heure. Les données sauvegardées sont :
- tous les logs (API Web, blockchain, services…)
- la blockchain
- les files de traitement
A votre disposition si vous avez des questions !