#! /usr/bin/env python
# -*- coding: iso-8859-15 -*-
import cgi, sys, os, sha, time, re
from html import html
from session import session
from utilisateurs import users
sys.path.append('/usr/scripts/gestion')
from ldap_crans import crans_ldap
db = crans_ldap()
######################################################
# fontion pour logguer un truc
def log (message) :
f = open('/var/log/wifiweb.log','a+')
f.write( time.strftime('%d/%m/%Y %H:%M:%S',time.localtime(time.time())) + ' ' + message + '\n')
f.close()
######################################################
# initialisation des variables
# initialisation de la page html
page = html()
page.sendheaderstobrowser()
page.titre("Gestion des bornes wifi")
# récupération des données du formulaire
form = cgi.FieldStorage()
sid = form.getvalue('sid')
action = form.getvalue('action','auth')
# url
try :
url = os.environ['HTTP_REFERER']
if '?' in url :
url = url.split('?')[0]
except :
url = ''
# création de la session
try :
sess = session(sid)
except :
sess = session()
sid = sess.sid
######################################################
# quelques fontions html
def message (texte, color='black'):
return '%s
' % (color,texte)
def message_ok (texte) :
return message (texte,'green')
def message_nok (texte) :
return message (texte,'red')
######################################################
# quelques variables html
def bouton (url='', sid='', action='', caption='') :
txt = ''
if url :
txt += '
' % caption
return txt
bouton_quitter = bouton (url, sid, 'logout', 'Quitter')
bouton_menu = bouton (url, sid, 'index', 'Menu principal')
bouton_retour = bouton ('javascript:history.go(-1)', '', '', 'Retour')
######################################################
# authentification
if action == 'valid-auth' :
sess.data['user'] = form.getvalue('user','')
sess.data['password'] = sha.new(form.getvalue('password','')).hexdigest()
if users.has_key( sess.data['user'] + ':' + sess.data['password'] ) :
log(sess.data['user'] + ' s\'est connecté' )
action = 'index'
if not sess.data.has_key('user') or not sess.data.has_key('password') :
action = 'auth'
if action != 'auth' :
if users.has_key( sess.data['user'] + ':' + sess.data['password'] ) :
# droits de l'utilisateur
#########################
# construction de la liste des bornes modifiables
bornes_modifiables = []
if len(users[ sess.data['user'] + ':' + sess.data['password'] ]) :
for lieu in users[ sess.data['user'] + ':' + sess.data['password'] ] :
for borne in db.search('canal=*&info=%s*' % lieu )['machine'] :
nom = borne.nom().encode('iso-8859-15').split('.')[0]
if nom not in bornes_modifiables :
bornes_modifiables.append(nom)
else :
# erreur d'authentification
###########################
log(sess.data['user'] + ' erreur d\'authentification' )
page.add('Erreur d\'authentification !
')
action = 'auth'
######################################################
# page : authentification
if action == 'auth' :
page.add("""
""" % sid )
action = ''
######################################################
# désactivation d'un borne
if action == 'desactive' and bornes_modifiables :
if form.getvalue('borne','') in bornes_modifiables :
log(sess.data['user'] + ' a désactivé %s' % form.getvalue('borne','') )
page.add('La borne %s sera désactivée dans quelques instants
' % form.getvalue('borne','') )
borne = db.search('host=%s.wifi.crans.org' % form.getvalue('borne',''), 'w' )['machine'][0]
if int(borne.puissance()) > 0 :
borne.puissance(-int(borne.puissance()))
borne.save()
action = 'liste-bornes'
else :
log(sess.data['user'] + ' a tenté de désactiver %s' % form.getvalue('borne','') )
action = 'erreur-droits'
######################################################
# activation d'un borne
if action == 'active' and bornes_modifiables :
if form.getvalue('borne','') in bornes_modifiables :
log(sess.data['user'] + ' a activé %s' % form.getvalue('borne','') )
page.add('La borne %s sera réactivée dans quelques instants
' % form.getvalue('borne','') )
borne = db.search('host=%s.wifi.crans.org' % form.getvalue('borne',''),'w' )['machine'][0]
if int(borne.puissance()) < 0 :
borne.puissance(int(borne.puissance().replace('-','')))
borne.save()
action = 'liste-bornes'
else :
log(sess.data['user'] + ' a tenté d\'activer %s' % form.getvalue('borne','') )
page.add('Vous n\'êtes pas authorisé à modifier la borne %s
' % form.getvalue('borne','') )
action = 'erreur-droits'
######################################################
# page : liste des bornes
if action == 'liste-bornes' and bornes_modifiables :
page.sous_titre('Liste des bornes')
for b in bornes_modifiables :
try :
borne = db.search('host=%s.wifi.crans.org' % b)['machine'][0]
except :
log('borne non existante : %s' % b)
continue
# formulaire
page.add('')
# menu de fin de page
page.add( "%s | %s | %s |
" % ( bouton(url,sid,'liste-bornes','Actualiser'), bouton_menu, bouton_quitter ) )
action = ''
######################################################
# page : erreur de droits
# si on a encore quelque chose à afficher c'est qu'il y une erreur
# on colle ca sur la faute des droits
if action not in [ 'index', 'logout', '' ] :
page.add("Vous n'avez pas le droits d'effectuer cette opération
\n")
page.add('Retour
')
action = ''
######################################################
# page : index
if action == 'index' :
# menu principal
page.sous_titre("Menu principal")
if bornes_modifiables :
page.add('Activation/désactivation d\'une borne
' % sid )
# menu de bas de page
page.add("%s" % bouton_quitter )
######################################################
# page : logout
if action == 'logout' :
log(sess.data['user'] + ' s\'est déconnecté' )
page.sous_titre('Session fermée...')
sess.destroy()
######################################################
# fin du script
page.sendtobrowser()