
A priori, le dossier wifi n'a pas de dépendance (enfin, un grep "bornes" -r | grep import ne m'a rient donné). wifiweb, n'en parlons pas.
91 lines
2.8 KiB
Python
91 lines
2.8 KiB
Python
#! /usr/bin/env python
|
|
# -*- coding: iso-8859-15 -*-
|
|
|
|
import os, random
|
|
from time import time
|
|
|
|
class session :
|
|
|
|
def __init__ (self, sid = None) :
|
|
"""
|
|
Si sid est fournit, on regarde si la session est valide ;
|
|
on soulève un exeption si il y a un problème
|
|
|
|
Si sid n'est pas fourni un créé une nouvelle session
|
|
"""
|
|
self.save = True
|
|
|
|
if sid :
|
|
|
|
# on vérifie la validité
|
|
if not os.access( self._sess_file(sid), os.W_OK ) :
|
|
raise ValueError, 'Session inconnue'
|
|
|
|
# on exporte le sid
|
|
self.sid = sid
|
|
|
|
# on lit les données
|
|
self.data = {}
|
|
f = open(self._sess_file(sid))
|
|
for i in f.readlines() :
|
|
if not i.strip() :
|
|
continue
|
|
key = i.split(' ')[0]
|
|
value = ' '.join(i.split(' ')[1:]).strip()
|
|
self.data[key] = value
|
|
|
|
if int(self.data['perime']) < int(time()) :
|
|
self.destroy()
|
|
raise ValueError, 'Session périmée'
|
|
|
|
else :
|
|
|
|
# on créé un nouveau sid
|
|
self.data = {}
|
|
ok = False
|
|
while not ok :
|
|
sid = ''.join( [ random.choice('abcdefghijklmnopqrstuvwxyz0123456789') for i in range(0,30) ])
|
|
# est ce que la session existe ?
|
|
if not os.path.exists(self._sess_file(sid)) :
|
|
# on créé un nouveau fichier avec un timeout de 60
|
|
f = os.open(self._sess_file(sid), os.O_WRONLY + os.O_CREAT , 0600)
|
|
f
|
|
# on valide
|
|
ok = True
|
|
self.sid = sid
|
|
|
|
# on initialise les données
|
|
self.data = {'timeout' : '600'}
|
|
|
|
def _sess_file (self, sid = None) :
|
|
""" Retourne le nom du fichier correspondant à la session """
|
|
if not sid :
|
|
sid = self.sid
|
|
return '/tmp/pysession-%s' % sid
|
|
|
|
def __del__ (self) :
|
|
""" On enregsitre la session à la destruction de l'instance """
|
|
|
|
if self.save :
|
|
# epok de peromption
|
|
self.data['perime'] = str(int(time() + int(self.data['timeout'])))
|
|
|
|
f = open(self._sess_file(), 'w')
|
|
for k in self.data.keys() :
|
|
f.write( '%s %s\n' % (k,self.data[k]) )
|
|
f.close()
|
|
|
|
def destroy(self) :
|
|
""" Supprime la session """
|
|
self.save = False
|
|
os.remove( self._sess_file() )
|
|
|
|
# on supprime toutes les vieilles sessions
|
|
for file in os.listdir('/tmp') :
|
|
if file[0:10] == 'pysession-' :
|
|
#print file[10:]
|
|
try :
|
|
s = session(file[10:])
|
|
s.save = False
|
|
except :
|
|
continue
|