scripts/impression/digicode.py
2015-07-24 01:14:40 +02:00

131 lines
4 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# #############################################################
# ..
# .... ............ ........
# . ....... . .... ..
# . ... .. .. .. .. ..... . ..
# .. .. ....@@@. .. . ........ .
# .. . .. ..@.@@..@@. .@@@@@@@ @@@@@@. ....
# .@@@@. .@@@@. .@@@@..@@.@@..@@@..@@@..@@@@.... ....
# @@@@... .@@@.. @@ @@ .@..@@..@@...@@@. .@@@@@. ..
# .@@@.. . @@@. @@.@@..@@.@@..@@@ @@ .@@@@@@.. .....
# ...@@@.... @@@ .@@.......... ........ ..... ..
# . ..@@@@.. . .@@@@. .. ....... . .............
# . .. .... .. .. . ... ....
# . . .... ............. .. ...
# .. .. ... ........ ... ...
# ................................
#
# #############################################################
"""
digicode.py
Fonctions pour controler le digicode du 4@J
Copyright (c) 2006, 2007, 2008, 2009 by Cr@ns (http://www.crans.org)
"""
import sys
import os
import requests
if '/usr/scripts' not in sys.path:
sys.path.append("/usr/scripts")
import gestion.secrets_new as secrets_new
from cranslib.deprecated import deprecated
digicode_pass = secrets_new.get("digicode_pass")
# #############################################################
# CONSTANTES
# #############################################################
INTRANET = os.getenv('DBG_INTRANET', 'intranet2.crans.org')
CREATION_LINK = "https://%s/digicode/create/" % INTRANET
LIST_LINK = "https://%s/digicode/list/" % INTRANET
CERTIFICATE = "/etc/ssl/certs/cacert.org.pem"
# #############################################################
# FONCTIONS
# #############################################################
class CommunicationError(Exception):
pass
def check_status(req):
status = req.status_code
if status != 200:
#TODO un peu plus d'info sur l'erreur
raise CommunicationError("Bad status from intranet: %d" % status)
# ###############################
# save_code
# ###############################
# enregistre le codes pour user_name sur l'intranet2
#
def save_code(code, user_name):
"""enregistre le codes pour ``user_name``"""
code = str(code)
response = requests.post(CREATION_LINK + code, data={'password':digicode_pass, 'user':user_name}, verify=CERTIFICATE, timeout=2)
check_status(response)
try:
code = int(response.content)
except (TypeError, ValueError):
raise ValueError(response.content)
return code
# ###############################
# gen_code
# ###############################
# genere un code aleatoire
# et l'enregistre
#
def gen_code(user_name):
"""On contacte l'intranet 2 pour générer le code et on récupère le résultat"""
response = requests.post(CREATION_LINK, data={'password':digicode_pass, 'user':user_name}, verify=CERTIFICATE, timeout=2)
check_status(response)
return response.content
# ###############################
# list_code
# ###############################
# liste les codes et leur age en secondes
#
def list_code(login=None):
"""
Renvoie la liste des codes existants.
La liste est sous la forme [(code, age (en sec), contenu du fichier),...]
"""
response = requests.post(LIST_LINK + (login if login else ""), data={'password':digicode_pass}, verify=CERTIFICATE, timeout=2)
check_status(response)
code_list = []
for line in response.content.split('\n'):
if line:
code_list.append(line.split(','))
return code_list
def get_codes(login):
return [code for (code, age, uid) in list_code(login)]
@deprecated
def read_code_file(code):
"""
Lis le fichier correspondant au code.
Renvoie le contenu du fichier.
"""
return "dummy"
# ###############################
# menage
# ###############################
# supprime les codes vieux de plus de 24h
#
@deprecated
def menage():
"""
Supprime les codes vieux de plus de 24h
dummy fun
"""
pass