diff --git a/wifiweb/bornes.py b/wifiweb/bornes.py
index 275d62cf..22a31625 100755
--- a/wifiweb/bornes.py
+++ b/wifiweb/bornes.py
@@ -1,13 +1,13 @@
#! /usr/bin/env python
# -*- coding: iso-8859-15 -*-
-import cgi, sys, os, sha, time
+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
+from ldap_crans import crans_ldap, machine, invite
db = crans_ldap()
######################################################
@@ -30,6 +30,14 @@ 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)
@@ -37,6 +45,38 @@ 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
@@ -45,16 +85,37 @@ if action == 'valid-auth' :
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 = 'liste'
+ 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'] ) :
- bornes_modifiables = users[ sess.data['user'] + ':' + sess.data['password'] ][1:]
+ # droits de l'utilisateur
+ #########################
+
+ # construction de la liste des bornes modifiables
+ bornes_modifiables = []
+ 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
@@ -71,11 +132,12 @@ if action == 'auth' :
""" % sid )
+ action = ''
######################################################
# désactivation d'un borne
-if action == 'desactive' :
+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','') )
@@ -83,15 +145,15 @@ if action == 'desactive' :
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','') )
- page.add('Vous n\'êtes pas authorisé à modifier la borne %s ' % form.getvalue('borne','') )
- action = 'liste'
+ action = 'erreur-droits'
######################################################
# activation d'un borne
-if action == 'active' :
+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','') )
@@ -99,15 +161,16 @@ if action == 'active' :
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 = 'liste'
+ action = 'erreur-droits'
######################################################
# page : liste des bornes
-if action == 'liste' :
+if action == 'liste-bornes' and bornes_modifiables :
page.sous_titre('Liste des bornes')
for b in bornes_modifiables :
@@ -125,51 +188,105 @@ if action == 'liste' :
# titre
if '-' in borne.puissance() :
# réactivation
- page.add('%s (borne désactivée) ' % borne.Nom())
+ 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())
+ page.add('%s (borne activée) ' % borne.Nom().encode('iso-8859-15'))
page.add(' ')
page.add(' ')
# commentaires
page.add(' ')
- page.add(' '.join(borne.info()))
+ 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(u' ' % b)
+ page.add(u' ' % b)
else :
- page.add(u' ' % b)
+ page.add(u' ' % b)
# fin du formulaire
page.add('')
- # bouton quitter
- page.add("""
-
-
-""" % (sid, sid) )
+ # menu de fin de page
+ page.add( "%s %s %s " % ( 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('Nom de machine : %s ' % m.nom().encode('iso-8859-15'))
+ page.add(' ' % ( 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("""
+
+
+
+""" % (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('See you soon')
+ page.sous_titre('Session fermée...')
sess.destroy()
######################################################
diff --git a/wifiweb/html.py b/wifiweb/html.py
index 013e33a1..1a359937 100755
--- a/wifiweb/html.py
+++ b/wifiweb/html.py
@@ -74,7 +74,7 @@ class html :
# division du contenu
page += "\n"
- page += self._corp.encode('iso-8859-15')
+ page += self._corp
page += "
\n\n"
# fin de la page
diff --git a/wifiweb/utilisateurs.py b/wifiweb/utilisateurs.py
index 039d93a8..bd70ce21 100755
--- a/wifiweb/utilisateurs.py
+++ b/wifiweb/utilisateurs.py
@@ -4,36 +4,13 @@
# les mots de passe sont cryptés avec la commande :
# python -c "import sha ; print sha.new('***').hexdigest()"
-# Répartitition des bornes dans les batiments
-#############################################
-
-# batiment Léonard de Vinci
-bornes_vinci_dgm = ['astrild', 'nanna']
-bornes_vinci_fab = ['hel']
-bornes_vinci_dgc = ['frigg']
-bornes_vinci = bornes_vinci_dgm + bornes_vinci_fab + bornes_vinci_dgc
-
-# batiment cournot
-bornes_cournot = ['aegir','snotra']
-
-# batiment d'Alembert
-bornes_bibliotheque = ['sif']
-bornes_alembert_hall = ['vidar']
-bornes_alembert_cri = ['yggdrasil']
-bornes_alembert_curie = ['freyr']
-brones_alembert = bornes_bibliotheque + bornes_alembert_hall + bornes_alembert_cri + bornes_alembert_curie
-
-# batiment pavillon des jardins
-bornes_pdj = ['magni']
-
-# batiments de l'ens
-bornes_ens = bornes_vinci + bornes_cournot + brones_alembert + bornes_pdj
-
# Liste des utilisateurs
########################
+# premier champ : autorisation d'inscrire des machines temporaires True|False
+# champs suivants : noms des bornes modifiables
users = {
- 'bilou:b6831110716ea7782b636469b31dc3a695b26386' : [True] + bornes_ens,
- 'vince||:7bc07c05eebf6726b48f557fcb60b434364034cd' : [True, 'valhalla','heimdall','vidar'] + bornes_ens,
- 'xabi:4f1da4cacfd69622c2123d83007a92f9e3de9722' : [True, 'heimdall']
+ 'bilou:b6831110716ea7782b636469b31dc3a695b26386' : [True, 'ens'],
+ 'vince||:7bc07c05eebf6726b48f557fcb60b434364034cd' : [True, 'ens'],
+ 'xabi:4f1da4cacfd69622c2123d83007a92f9e3de9722' : [True, 'ens']
}