
* Comme ça c'est plus clair que c'est un truc custom crans * Le lien symbolique /usr/scripts/gestion/crans/ est retiré. D'autres suivront.
165 lines
5.1 KiB
Python
165 lines
5.1 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
# #############################################################
|
|
# ..
|
|
# .... ............ ........
|
|
# . ....... . .... ..
|
|
# . ... .. .. .. .. ..... . ..
|
|
# .. .. ....@@@. .. . ........ .
|
|
# .. . .. ..@.@@..@@. .@@@@@@@ @@@@@@. ....
|
|
# .@@@@. .@@@@. .@@@@..@@.@@..@@@..@@@..@@@@.... ....
|
|
# @@@@... .@@@.. @@ @@ .@..@@..@@...@@@. .@@@@@. ..
|
|
# .@@@.. . @@@. @@.@@..@@.@@..@@@ @@ .@@@@@@.. .....
|
|
# ...@@@.... @@@ .@@.......... ........ ..... ..
|
|
# . ..@@@@.. . .@@@@. .. ....... . .............
|
|
# . .. .... .. .. . ... ....
|
|
# . . .... ............. .. ...
|
|
# .. .. ... ........ ... ...
|
|
# ................................
|
|
#
|
|
# #############################################################
|
|
"""
|
|
digicode.py
|
|
|
|
Fonctions pour controler le digicode du 4@J (simulation)
|
|
|
|
Copyright (c) 2006, 2007, 2008, 2009 by Cr@ns (http://www.crans.org)
|
|
"""
|
|
import sys
|
|
import time
|
|
import tempfile
|
|
import os
|
|
import commands
|
|
import string
|
|
import random
|
|
sys.path.append("/usr/scripts/")
|
|
import cranslib.utils.files
|
|
# #############################################################
|
|
# CONSTANTES
|
|
# #############################################################
|
|
CODES_SERVER = "zamok"
|
|
CODES_DIR = "/var/impression/codes/"
|
|
|
|
|
|
# #############################################################
|
|
# EXCEPTIONS
|
|
# #############################################################
|
|
def CodeAlreadyExists(Exception):
|
|
pass
|
|
|
|
# #############################################################
|
|
# FONCTIONS
|
|
# #############################################################
|
|
# test pour voir si on est bien sur la bonne machine
|
|
import socket
|
|
if socket.gethostname() != CODES_SERVER:
|
|
CODES_DIR = tempfile.mkdtemp(prefix='fake_digicode')
|
|
FAKE_DIR = True
|
|
#raise EnvironmentError, "La manipulation des codes pour le digicode n'est possible que sur %s" % CODES_SERVER
|
|
else:
|
|
FAKE_DIR = False
|
|
|
|
def __del__():
|
|
if FAKE_DIR:
|
|
os.rmdir(CODES_DIR)
|
|
|
|
|
|
def __init__():
|
|
pass
|
|
# ###############################
|
|
# save_code
|
|
# ###############################
|
|
# enregistre le codes avec "monString" dans le fichier
|
|
#
|
|
def save_code(code, monString=""):
|
|
"""enregistre le codes avec "monString" dans le fichier """
|
|
code = str(code)
|
|
if os.path.exists( os.path.join( CODES_DIR, code ) ):
|
|
raise CodeAlreadyExists
|
|
# On enregistre le fichier avec le code pour numero
|
|
codefichier = open( os.path.join( CODES_DIR, code ) , 'w')
|
|
codefichier.write(monString)
|
|
codefichier.write("\n")
|
|
codefichier.close()
|
|
return code
|
|
|
|
|
|
# ###############################
|
|
# gen_code
|
|
# ###############################
|
|
# genere un code aleatoire
|
|
# et l'enregistre
|
|
#
|
|
def gen_code(user_name):
|
|
""" Genere un code au hasard l'enregistre avec user_name dans le fichier"""
|
|
# Generation du code et ecriture du code
|
|
rand=random.Random()
|
|
# Graine automatique avec le temps
|
|
rand.seed()
|
|
|
|
for i in range(1000):
|
|
# On genere un code
|
|
code = rand.randint(100000, 999999)
|
|
# Si le code est libre, on sort de la boucle
|
|
if not os.path.exists( os.path.join( CODES_DIR, str( code ) ) ):
|
|
break
|
|
|
|
else:
|
|
# Pas de code disponible
|
|
print ("ERROR: Il n'y a pas de code disponible" )
|
|
sys.stderr.write ("ERROR: Il n'y a pas de code disponible" )
|
|
try:
|
|
sys.stderr.write("DEBUG: Un rapport de bug a ete automatiquement envoye.\n")
|
|
except:
|
|
sys.stderr.write("ERROR: Impossible d'envoyer le rapport de bug.\n")
|
|
sys.stderr.write("ERROR: Plus de codes disponibles.\n")
|
|
sys.stderr.write("ERROR: Penser a ouvrir a l'adherent debite...\n")
|
|
return
|
|
save_code(code, user_name)
|
|
return code
|
|
|
|
|
|
# ###############################
|
|
# list_code
|
|
# ###############################
|
|
# liste les codes et leur age en secondes
|
|
#
|
|
def list_code():
|
|
"""
|
|
Renvoie la liste des codes existants.
|
|
La liste est sous la forme [(code, age (en sec), contenu du fichier),...]
|
|
"""
|
|
files = os.listdir(CODES_DIR)
|
|
code_list = []
|
|
for aCode in files:
|
|
age = cranslib.utils.files.ageOfFile(os.path.join(CODES_DIR, aCode ) )
|
|
content = read_code_file(aCode)
|
|
code_list.append((aCode, age, content ) )
|
|
return code_list
|
|
|
|
def read_code_file(code):
|
|
"""
|
|
Lis le fichier correspondant au code.
|
|
Renvoie le contenu du fichier.
|
|
"""
|
|
myfile = open(os.path.join(CODES_DIR, code ), 'r')
|
|
lineStr = myfile.readline()
|
|
myfile.close()
|
|
return lineStr.replace('\n','')
|
|
|
|
|
|
# ###############################
|
|
# menage
|
|
# ###############################
|
|
# supprime les codes vieux de plus de 24h
|
|
#
|
|
def menage():
|
|
"""
|
|
Supprime les codes vieux de plus de 24h
|
|
"""
|
|
fileList = os.listdir(CODES_DIR)
|
|
for aFile in fileList:
|
|
aFilePath = os.path.join(CODES_DIR, aFile)
|
|
if os.path.isfile(aFilePath):
|
|
if cranslib.utils.files.fileIsOlderThan(aFilePath, days=1):
|
|
os.remove(aFilePath)
|