From bba7d3937bcfd5aaff7fb10f75defffacb10a687 Mon Sep 17 00:00:00 2001 From: chove Date: Fri, 11 Mar 2005 02:06:28 +0100 Subject: [PATCH] on peut maintenant ajouter des personnes temporairement darcs-hash:20050311010628-4ec08-2f443958c721ace50d78154fc6fd99915a0f9181.gz --- wifiweb/bornes.py | 183 ++++++++++++++++++++++++++++++++-------- wifiweb/html.py | 2 +- wifiweb/utilisateurs.py | 33 ++------ 3 files changed, 156 insertions(+), 62 deletions(-) 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 += '
\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 @@ -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( "
" % ( 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('
%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('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'] }