FFDN voting tool

Julien Rabier b4a7c4f777 add i18n support for reminder script 12 years ago
static 9a0891ac3f Many improvment in votes 13 years ago
templates 1cff7e924d Send a main when opening a vote 12 years ago
translations 69c59dd364 add translation files, generated with pybabel 12 years ago
README.md 5192460c51 add some lines of how-to about translation 12 years ago
babel.cfg 71482ea95d add support for translation via babel 12 years ago
main.py 5214a40c47 fix one missing utf-8 encoding 12 years ago
messages.pot 69c59dd364 add translation files, generated with pybabel 12 years ago
reminder.py b4a7c4f777 add i18n support for reminder script 12 years ago
requirements.txt 233934ccce add requirements.txt 12 years ago
schema.sql 4036f1d5d9 Add OpenID authentication in parallel with casual one 12 years ago
schema_0.1.X_to_0.2.X.sql e82173a1eb Add vote deletion (only hides it in the DB : can be recovered manually from SQL by updating the row) 12 years ago
schema_0.2.X_to_0.3.X.sql 1cff7e924d Send a main when opening a vote 12 years ago
settings.py.example 55ac14c222 add 2 lines of conf for babel 12 years ago

README.md

Système de vote pour associations

Développé pour et par des membres de la Fédération FDN (http://ffdn.org)

Installation (développement)

Dépendances :

  • python (testé avec python 2.7
  • python-openid
  • sqlite3
  • Flask
  • Flask-OpenID

Récupérer la dernière version de développement : $ git clone git@git.ndn.cx:cavote.git

Installation de la base de données : `$ sqlite3 /path/to/cavote.db

.read schema.sql`

Modifiez les paramètres de settings.py pour qu'ils correspondent à votre installation

Lancez le serveur en mode développement : $ python main.py

Dans un navigateur, vous pourrez à cavote à l'adresse http://localhost:5000/.

L'utilisateur par défaut peut être activé à l'adresse http://localhost:5000/login/1/victory. Modifiez en les identifiants de connection lors du premier accès.

Traduction

Génération du template de chaînes à traduire :

pybabel extract -F babel.cfg -o messages.pot .

Génération du catalogue d'une langue en particulier :

pybabel init -i messages.pot -d translations -l fr

Une fois la traduction effectuée :

pybabel compile -d translations

Si les chaînes changent :

pybabel extract -F babel.cfg -o messages.pot .
pybabel update -i messages.pot -d translations

Installation (production)

Les étapes pour l'installation en mode production sont les mêmes qu'en mode développement, jusqu'à l'étape de lancement du serveur.

NDN a choisi d'utiliser gunicorn pour mettre en production son instance de cavote.

Pour celà, installez gunicorn (dépendant de votre distribution).

Dans le répertoire de cavote, tappez : gunicorn -w 4 -b 192.168.122.104:8000 main:app -D

  • -w 4 signifie que gunicorn lancera 4 "workers", ce qui devrait amplement suffir
  • remplacez l'adresse IP et le port par votre configuration. L'adresse IP doit correspondre à qu'appellera votre serveur web en frontend (nous utiliserons nginx dans l'exemple). Si ce frontend est situé sur la même machine que cavote, l'adresse IP sera 127.0.0.1.
  • De même, changez de port si vous souhaitez en utiliser un autre
  • -D signifie que gunicorn sera lancé en daemon.
    • Enlever vous permettrait de tester et pouvoir fermer le serveur en tappant Ctrl+C
    • En mode daemon, un pkill gunicorn killera vos workers gunicorn

Pour activer les notifications par mail, mettez en place une tache cron appelant le script reminder.py.

Configurez nginx (/etc/nginx/sites-enabled ou /etc/nginx/nginx.conf ou autre selon votre système)

    server {
      listen       <votre-ip>:80;
      server_name  <votre-url-cavote>;
      rewrite      ^(.*) https://<votre-url-cavote>$1 permanent;
    }

    #
    # FIXME: specify correct value(s) for `server_name` directive and
    #        `ssl_certificate` + `ssl_certificate_key` directives below
    #
    server {
      listen       <votre-ip>:443;
      server_name  <votre-url-cavote>;
      ## make sure you change location if you did clone into /usr/local/app

      ssl on;
      ssl_certificate      /path/to/<votre_certificat_ssl>.crt;
      ssl_certificate_key  /path/to/<votre_certificat_ssl>.key;
      # enable better ssl security if you like to mitigate BEAST and other exploits
      #ssl_session_cache       shared:SSL:10m;
      #ssl_session_timeout     5m;
      ssl_protocols           SSLv3 TLSv1;
      ssl_ciphers             ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH:!AESGCM;
      ssl_prefer_server_ciphers on;
      #add_header              Strict-Transport-Security max-age=500;
      #ssl_ecdh_curve          secp521r1;


    #
    # FIXME: modify the `rewrite` directive below to point to proper S3 bucket
    #        and path or comment out if you will store images on local file system
    #
    location / {
      proxy_pass        http://192.168.122.104:8000;
      proxy_set_header  X-Real-IP  $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-Proto https;
      proxy_redirect off;
      client_max_body_size 4M;
      client_body_buffer_size 128K;
    }

      error_page 500 502 503 504 /50x.html;
      location = /50x.html {
      root html;
      }
    }

Modifiez les valeurs correspondant a la configuration de votre installation. Dans l'exemple ci dessus, cavote sera disponible automatiquement et uniquement en HTTPS.

Licence

La licence appliquée est la GNU/AGPLv3

Contributeurs

  • Julien Rabier
  • Guillaume Subiron
  • Arnaud Delcasse
  • Pierre 'Rogdham' Pavlidès