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

Installation des dépendances :

    $ pip install -r requirements.txt

Installation de la base de données :
    
    $ sqlite3 cavote.db
    > .read schema.sql
    > .read schema_0.1.X_to_0.2.X.sql
    > .read schema_0.2.X_to_0.3.X.sql
 
Modifiez les paramètres de settings.py pour qu'ils correspondent à votre installation.

    $ cp settings.py.example settings.py
    $ vim settings.py

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