config – Variables de configuration

Variables de configurations propres au fonctionnement du serveur NoteKfet2015.

Certaines variables de configuration sont cependant dans la table configurations de la base de données.

config.database = 'note'

Nom de la base PostgreSQL

config.pgsql_user = 'note'

Nom de l’utilisateur PostgreSQL

config.database_mails = 'nkmails'

Nom de la base PostgreSQL où sont enqueués les mails

config.url_note = 'https://note.crans.org/note/'

L’adresse à laquelle on est censé trouver l’interface django de la note.

config.url_regen_password = 'https://note.crans.org/note/regen_pw/'

L’adresse à laquelle on peut réinitialiser son mot de passe sur l’interface django

config.url_confirm_email = 'https://note.crans.org/note/confirm_email/'

L’adresse à laquelle on confirm les adresses mail

config.debug = False

Quand on est en mode debug, certaines choses n’ont pas le même comportement.

config.debug_sendmail_to = [u'notekfet2015@crans.org']

Remplace l’adresse de destination des mails quand on est en mode debug.

config.debug_stdout = True

Est-ce qu’il faut débuguer sur stdout ?

config.debug_logfile = True

Est-ce qu’il faut débuguer dans le logfile ? (cf plus bas pour son path)

config.debug_level_logfile = 4

Niveaux de verbosité du débug (dans le fichier et en stdout (ignoré si le debug_stdout est à False)) Chaque niveau rajoute des choses qui sont loguées

  • 0 : rien (difficile de débuguer).
  • 1 : seulement quand quelque chose a été modifié (coïncide avec les appels à log).
  • 2 : les erreurs “ennuyeuses”, c’est-à-dire, qui ne devrait jamais survenir dans une note sans bug…
  • 3 : toutes les erreurs/commandes échouées aussi sont loguées.
  • 4 : les commandes réussies (mais qui ne font pas de modification) également.
  • 5 : tout (les réponses aux Server.mayi() et les messages de thread lancé, communication entre Server, attente du départ des clients.)

 (les messages de démarrage/arrêt apparaissent dans tous les niveaux > 0)

config.debug_level_stdout = 5

debuglevel pour stdout

config.default_stdout = '/var/log/note/full_log.log'

Fichier où rediriger stdout quand le serveur est lancé en mode daemon.

config.pidfile = '/var/run/note/serveur.pid'

Fichier où enregistrer le pid du processus quand le serveur est lancé en mode daemon.

config.basedir = '/home/note/note-kfet-2015-serveur'

Répertoire de base du serveur NoteKfet2015

config.serverdir = '/home/note/note-kfet-2015-serveur/serveur/'

Répertoire contenant le code du serveur

config.photosdir = '/home/note/note-kfet-2015-serveur/photos/'

Répertoire où stocker les photos

config.authfile = '/home/note/note-kfet-2015-serveur/serveur/authdb.json'

Path du fichier authdb (pour authentifier les utilisateurs spéciaux)

config.logfile = '/home/note/note-kfet-2015-serveur/serveur/server.log'

Path du fichier de log

config.integrityerrorfile = '/home/note/note-kfet-2015-serveur/integrite/errorfile'

Path du fichier contenant les erreurs des checks d’intégrité

config.integritylogfile = '/home/note/note-kfet-2015-serveur/integrite/logfile'

Path du fichier contenant les logs des checks d’intégrité

config.server_keyfile = '/home/note/note-kfet-2015-serveur/keys/note-kfet-2015-serveur.key'

Path de la clé SSL

config.server_certfile = '/home/note/note-kfet-2015-serveur/keys/note-kfet-2015-serveur.crt'

Path du certificat SSL

config.clients_whitelist = [u'manual', u'Python Client alpha', u'test_client', u'HTTP Django', u'Basile', u'digicode']

Liste des clients que le serveur accepte (ie = compatible). Évidemment on peut toujours se connecter à la main, à nos risques et périls.

config.listen_bind = ['0.0.0.0']

Adresses IP sur lesquelles écouter

config.listen_port = 4242

Port sur lequel écouter

config.request_max_size = 2000000

Taille maximale d’une requête

config.trusted_ips = ['127.0.0.1']

IPs auxquelles on fait confiance pour cafter l’IP de leur utilisateur

config.limited_accounts = {3508: ['138.231.143.192', '2a06:e042:100:4:d250:99ff:fe5a:6364', '138.231.141.159', '2a06:e042:100:4:52e5:49ff:fea6:70b2']}

Comptes qui ne peuvent se connecter que depuis certaines IPs

config.token_regenerate_password_size = 20

Longueur d’un token envoyé par mail pour régénérer un mot de passe

config.droits_aliases_bdd = {'comptes': ['search', 'adherents_weak', 'aliases', 'historique_pseudo', 'update_photo'], '_noalias': ['forced', 'overforced', 'transactions_admin', 'chgpass', 'digicode', 'tresorerie'], 'boutons': ['create_bouton', 'update_bouton', 'delete_bouton'], 'admin': ['activites_admin', 'invites_admin', 'adhesions_admin', 'adherents_strong', 'wei_admin', 'full_search', 'supprimer_compte', 'remboursement_admin'], 'note': ['get_boutons', 'inscriptions', 'consos', 'get_photo', 'transferts', 'credits', 'retraits', 'quick_search', 'historique_transactions', 'transactions'], 'basic': ['login', 'myself', 'preinscriptions', 'dons', 'activites', 'invites', 'remboursement', 'wei', 'liste_droits']}

Il y a plein de droits, mais certains méta-droits sont en fait des alias pour plein d’autres droits on ne parle ici que des droits pour les utilisateurs bdd.

Les alias "all" et "root" ne sont pas définis ici, mais hardcodés. Ils valent pour tous les droits. (attention, ça veut dire vraiment tout , y compris "chgpass", mais il est bien cloisonné droits/surdroits et ne bypass pas supreme)

"myself" est un droit sépcial qui signifie “Je veux avoir l’accès à mon propre compte”. Quand on se connecte “pour laisser” on ne le met pas dans son masque.

config.droits_aliases_bdd_keys = ['basic', 'note', 'comptes', 'boutons', 'admin']

Liste des alias. Permet de forcer leur ordre d’affichage.

config.droits_aliases_special = {'note': ['get_boutons', 'inscriptions', 'consos', 'get_photo', 'transferts', 'credits', 'retraits', 'quick_search', 'historique_transactions', 'transactions', 'search', 'adherents_weak', 'aliases', 'historique_pseudo', 'update_photo'], 'basic': ['login', 'myself', 'preinscriptions', 'dons', 'activites', 'invites', 'remboursement', 'wei', 'liste_droits']}

Les alias de droits sont différents pour les utilisateurs spéciaux.

config.special_privileges = ['die', 'who', 'adduser', 'deluser', 'users', 'surdroits', 'speak', 'broadcast']

Droits accessibles uniquement aux utilisateurs spéciaux

config.no_delete_droits = ['chgpass', 'supprimer_compte']

On ne peut pas supprimer un compte qui a un de ces droits si on ne les as pas soi-même.

config.minimum_account_data = ['idbde', 'pseudo']

Données sur le compte qu’on peut quand même demander dans un whoami si on n’a pas le droit myself

config.inactivity_timeout = {'alive': 1800}

Temps d’inactivité (en secondes) au bout duquel un utilisateur perd la possibilité d’utiliser un droit. Le droit “alive” signifiant “être authentifié”

config.mails_from = 'notekfet2015@crans.org'

Contenu du champ From des mails envoyés

config.ml_respo_info = 'respo-info.bde@lists.crans.org'

Mailing-list des respo-info

config.mails_problem_to = ['respo-info.bde@lists.crans.org']

Adresses mails recevant les rapports en cas de problème

config.mails_integrity_problem = ['respo-info.bde@lists.crans.org']

Destinataires des mails en cas de problème de cohérence de la base.

config.mails_generate_password_duplicate = ['respo-info.bde@lists.crans.org']

Destinataires des mails en cas de comptes multiples à la réinitialisation d’un mot de passe

config.ml_tresoriers = 'tresorerie.bde@lists.crans.org'

Pour contacter les trésoriers du BDE

config.ml_respo_pot = 'respo-pots.bde@lists.crans.org'

Pour contacter les responsables des activités du BDE

config.to_noack = ['tresorerie.bde@lists.crans.org']

Destinataires pour lesquels on mettra un “X-Ack: No” pour éviter les réponses automatiques de certaines mailing-lists

config.precedence_bulk_regex = '[^ ]+@lists.crans.org'

Si un destinataire matche cette regexp, on ajoute un header “Precedence: bulk” pour ne pas recevoir les moderation notices

config.types_transactions = [u'transfert', u'bouton', u'don', u'cr\xe9dit', u'retrait', u'adh\xe9sion', u'remboursement']

Types de transactions possibles

config.buffer_transactions_size = 50

Le nombre de transactions tansmises quand on demande un ServeurFonctions.historique_transactions() avec paramètre "last"

config.wiki_pseudo = 'NoteKfet2015'

Pseudo wiki (Le mot de passe est importé du module secrets)

config.wiki_calendar_raw = 'VieBde/PlanningSoirees/LeCalendrier'

Page wiki générant le calendrier des activités

config.wiki_calendar_humanreadable = 'VieBde/PlanningSoirees'

Page wiki recensant le planning des activités

config.photo_max_size = 1024000

Résolution limite des photos

config.photo_allowed_formats = ['png', 'jpg', 'jpeg', 'gif', 'tiff', 'eps', 'tga', 'ico', 'bmp', 'xcf']

Seul ces formats de photo sont pris en compte, les autres seront rejetés.

config.html_table_template = u'<!DOCTYPE html>\n<html>\n<head>\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>\n<title>%(titre)s</title>\n<style type="text/css">\ntable\n{\n border-collapse: collapse;\n border: 1px solid black;\n vertical-align: center;\n margin: auto;\n}\nth\n{\n border: 1px solid black;\n text-align: center;\n padding: 5px 5px 5px 5px;\n}\ntd\n{\n border: 1px solid black;\n padding: 5px 5px 5px 5px;\n}\nh1\n{\n text-align: center;\n margin: 50px;\n}\n</style>\n</head>\n<body>\n<p>Liste g\xe9n\xe9r\xe9e le %(date)s \xe0 %(heure)s</p>\n<h1>%(titre)s</h1>\n<table style="border: 1px solid black; margin: auto">\n%(table_header)s\n%(table_content)s\n</table>\n</body>\n</html>'

Template html pour la liste des invités

config.html_invites_th_template = u"<tr><th>Nom</th> <th>Pr\xe9nom</th> <th>Responsable</th> <th>Nombre d'invitations</th></tr>\n"

html pour le header de liste d’invités

config.html_invites_tr_template = u'<tr><td>%(nom)s</td> <td>%(prenom)s</td> <td>%(responsable)s</td> <td>%(times)s</td></tr>\n'

html pour une ligne de liste d’invités

config.binary_wkhtmltopdf = u'/usr/bin/wkhtmltopdf'

Path du binaire wkhtmltopdf