#! /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, machine, invite 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 += '
\n' % url else : txt += '\n' if sid : txt += '\n' % sid if action : txt += '' % action txt += '\n
' % 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'] ]) > 1 : for lieu in users[ sess.data['user'] + ':' + sess.data['password'] ][1:] : #bornes_modifiables += [ borne.nom().split('.')[0] for borne in borne.bd.search('canal=*&info=%s*' % lieu )['machine'] if borne.nom().split('.')[0] not in bornes_modifiables ] 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) # l'utilisateur a-t-il le droit d'ajouter des utilisateurs temporaires droits_ajout_temporaire = users[ sess.data['user'] + ':' + sess.data['password'] ][0] 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("""
Utilisateur :
Mot de passe :
""" % 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('
') page.add('' % sid ) page.add('' % b) # titre if '-' in borne.puissance() : # réactivation page.add('%s (borne désactivée)' % borne.Nom().encode('iso-8859-15')) page.add('') else : # désctivation page.add('%s (borne activée)' % borne.Nom().encode('iso-8859-15')) page.add('') page.add('
') # commentaires page.add('
 ') page.add('
'.join( filter(lambda x : re.match("^\<.*\>", x) == None, borne.info() ) ).encode('iso-8859-15')) page.add('
') # bouton de validation if '-' in borne.puissance() : page.add('' % b) else : page.add('' % b) # fin du formulaire page.add('
') # menu de fin de page page.add( "
" % ( bouton(url,sid,'liste-bornes','Actualiser'), bouton_menu, bouton_quitter ) ) action = '' ###################################################### # page : ajouter un machine temporaire if action == 'ajout-machine' and droits_ajout_temporaire : machine_proprio = form.getvalue('machine_proprio','') machine_mac = form.getvalue('machine_mac','') affiche_formulaire = True # formulaire déja remli if machine_proprio and machine_mac : # on essaie d'ajouter une machine try : m = machine(invite(),'wifi') m.mac(machine_mac) m.info('Propriétaire : %s' % machine_proprio ) m.info('Cableur : %s' % sess.data['user'] ) m.nom('invite-ens-%s' % m.ip('').split('.')[3] ) m.save() page.add('La machine de "%s" a bien été ajoutée,
l\'ajout sera pris en compte dans 10 minutes environ.


' % machine_proprio ) page.add('Adresse mac : %s
' % m.mac().encode('iso-8859-15')) page.add('Adresse ip : %s
' % m.ip().encode('iso-8859-15')) page.add('Clef IP-sec : %s
' % m.ipsec().encode('iso-8859-15')) page.add('Nom de machine : %s

' % m.nom().encode('iso-8859-15')) page.add('
%s%s%s
%s%s%s
' % ( bouton(url,sid,'ajout-machine','Ajouter une autre machine'), bouton_menu, bouton_quitter)) affiche_formulaire = False except ValueError, e: page.add('ERREUR : %s

' % e.args[0].encode('iso-8859-15') ) if affiche_formulaire : page.add("""
Prénom Nom :
Adresse MAC :


%s%s
""" % (url, sid, machine_proprio, machine_mac, 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 ) if droits_ajout_temporaire : page.add('Ajouter temporairement un machine
' % 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()