on peut maintenant ajouter des personnes temporairement

darcs-hash:20050311010628-4ec08-2f443958c721ace50d78154fc6fd99915a0f9181.gz
This commit is contained in:
chove 2005-03-11 02:06:28 +01:00
parent 5e533c467e
commit bba7d3937b
3 changed files with 156 additions and 62 deletions

View file

@ -1,13 +1,13 @@
#! /usr/bin/env python #! /usr/bin/env python
# -*- coding: iso-8859-15 -*- # -*- coding: iso-8859-15 -*-
import cgi, sys, os, sha, time import cgi, sys, os, sha, time, re
from html import html from html import html
from session import session from session import session
from utilisateurs import users from utilisateurs import users
sys.path.append('/usr/scripts/gestion') sys.path.append('/usr/scripts/gestion')
from ldap_crans import crans_ldap from ldap_crans import crans_ldap, machine, invite
db = crans_ldap() db = crans_ldap()
###################################################### ######################################################
@ -30,6 +30,14 @@ form = cgi.FieldStorage()
sid = form.getvalue('sid') sid = form.getvalue('sid')
action = form.getvalue('action','auth') 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 # création de la session
try : try :
sess = session(sid) sess = session(sid)
@ -37,6 +45,38 @@ except :
sess = session() sess = session()
sid = sess.sid sid = sess.sid
######################################################
# quelques fontions html
def message (texte, color='black'):
return '<font color="%s">%s</font><br>' % (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 += '<form action="%s" method="POST">\n' % url
else :
txt += '<form method="POST">\n'
if sid :
txt += '<input type="hidden" name="sid" value="%s">\n' % sid
if action :
txt += '<input type="hidden" name="action" value="%s">' % action
txt += '<input type="submit" value="%s">\n</form>' % 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 # authentification
@ -45,16 +85,37 @@ if action == 'valid-auth' :
sess.data['password'] = sha.new(form.getvalue('password','')).hexdigest() sess.data['password'] = sha.new(form.getvalue('password','')).hexdigest()
if users.has_key( sess.data['user'] + ':' + sess.data['password'] ) : if users.has_key( sess.data['user'] + ':' + sess.data['password'] ) :
log(sess.data['user'] + ' s\'est connecté' ) 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 action != 'auth' :
if users.has_key( sess.data['user'] + ':' + sess.data['password'] ) : 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=<lieu>%s*' % lieu )['machine'] if borne.nom().split('.')[0] not in bornes_modifiables ]
for borne in db.search('canal=*&info=<lieu>%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 : else :
# erreur d'authentification
###########################
log(sess.data['user'] + ' erreur d\'authentification' ) log(sess.data['user'] + ' erreur d\'authentification' )
page.add('<font color="red">Erreur d\'authentification !</font><br><br>') page.add('<font color="red">Erreur d\'authentification !</font><br><br>')
action = 'auth' action = 'auth'
###################################################### ######################################################
# page : authentification # page : authentification
@ -71,11 +132,12 @@ if action == 'auth' :
</form> </form>
</center> </center>
""" % sid ) """ % sid )
action = ''
###################################################### ######################################################
# désactivation d'un borne # désactivation d'un borne
if action == 'desactive' : if action == 'desactive' and bornes_modifiables :
if form.getvalue('borne','') in bornes_modifiables : if form.getvalue('borne','') in bornes_modifiables :
log(sess.data['user'] + ' a désactivé %s' % form.getvalue('borne','') ) log(sess.data['user'] + ' a désactivé %s' % form.getvalue('borne','') )
page.add('<font color="blue">La borne <b>%s</b> sera d&eacute;sactiv&eacute;e dans quelques instants</font><br><br>' % form.getvalue('borne','') ) page.add('<font color="blue">La borne <b>%s</b> sera d&eacute;sactiv&eacute;e dans quelques instants</font><br><br>' % form.getvalue('borne','') )
@ -83,15 +145,15 @@ if action == 'desactive' :
if int(borne.puissance()) > 0 : if int(borne.puissance()) > 0 :
borne.puissance(-int(borne.puissance())) borne.puissance(-int(borne.puissance()))
borne.save() borne.save()
action = 'liste-bornes'
else : else :
log(sess.data['user'] + ' a tenté de désactiver %s' % form.getvalue('borne','') ) log(sess.data['user'] + ' a tenté de désactiver %s' % form.getvalue('borne','') )
page.add('<font color="red">Vous n\'&ecirc;tes pas authoris&eacute; à modifier la borne <b>%s</b></font><br><br>' % form.getvalue('borne','') ) action = 'erreur-droits'
action = 'liste'
###################################################### ######################################################
# activation d'un borne # activation d'un borne
if action == 'active' : if action == 'active' and bornes_modifiables :
if form.getvalue('borne','') in bornes_modifiables : if form.getvalue('borne','') in bornes_modifiables :
log(sess.data['user'] + ' a activé %s' % form.getvalue('borne','') ) log(sess.data['user'] + ' a activé %s' % form.getvalue('borne','') )
page.add('<font color="blue">La borne <b>%s</b> sera r&eacute;activ&eacute;e dans quelques instants</font><br><br>' % form.getvalue('borne','') ) page.add('<font color="blue">La borne <b>%s</b> sera r&eacute;activ&eacute;e dans quelques instants</font><br><br>' % form.getvalue('borne','') )
@ -99,15 +161,16 @@ if action == 'active' :
if int(borne.puissance()) < 0 : if int(borne.puissance()) < 0 :
borne.puissance(int(borne.puissance().replace('-',''))) borne.puissance(int(borne.puissance().replace('-','')))
borne.save() borne.save()
action = 'liste-bornes'
else : else :
log(sess.data['user'] + ' a tenté d\'activer %s' % form.getvalue('borne','') ) log(sess.data['user'] + ' a tenté d\'activer %s' % form.getvalue('borne','') )
page.add('<font color="red">Vous n\'&ecirc;tes pas authoris&eacute; à modifier la borne <b>%s</b></font><br><br>' % form.getvalue('borne','') ) page.add('<font color="red">Vous n\'&ecirc;tes pas authoris&eacute; à modifier la borne <b>%s</b></font><br><br>' % form.getvalue('borne','') )
action = 'liste' action = 'erreur-droits'
###################################################### ######################################################
# page : liste des bornes # page : liste des bornes
if action == 'liste' : if action == 'liste-bornes' and bornes_modifiables :
page.sous_titre('Liste des bornes') page.sous_titre('Liste des bornes')
for b in bornes_modifiables : for b in bornes_modifiables :
@ -125,51 +188,105 @@ if action == 'liste' :
# titre # titre
if '-' in borne.puissance() : if '-' in borne.puissance() :
# réactivation # réactivation
page.add('<b><u>%s</u></b> <font color="red">(borne d&eacute;sactiv&eacute;e)</font>' % borne.Nom()) page.add('<b><u>%s</u></b> <font color="red">(borne d&eacute;sactiv&eacute;e)</font>' % borne.Nom().encode('iso-8859-15'))
page.add('<input type="hidden" name="action" value="active">') page.add('<input type="hidden" name="action" value="active">')
else : else :
# désctivation # désctivation
page.add('<b><u>%s</u></b> <font color="green">(borne activ&eacute;e)</font>' % borne.Nom()) page.add('<b><u>%s</u></b> <font color="green">(borne activ&eacute;e)</font>' % borne.Nom().encode('iso-8859-15'))
page.add('<input type="hidden" name="action" value="desactive">') page.add('<input type="hidden" name="action" value="desactive">')
page.add('<br>') page.add('<br>')
# commentaires # commentaires
page.add('<table><tr><td width=\"20\">&nbsp;</td><td>') page.add('<table><tr><td width=\"20\">&nbsp;</td><td>')
page.add('<br>'.join(borne.info())) page.add('<br>'.join( filter(lambda x : re.match("^\<.*\>", x) == None, borne.info() ) ).encode('iso-8859-15'))
page.add('</td></tr></table>') page.add('</td></tr></table>')
# bouton de validation # bouton de validation
if '-' in borne.puissance() : if '-' in borne.puissance() :
page.add(u'<input type="submit" value="Réactiver %s">' % b) page.add(u'<input type="submit" value="R&eacute;activer %s">' % b)
else : else :
page.add(u'<input type="submit" value="Désactiver %s">' % b) page.add(u'<input type="submit" value="D&eacute;sactiver %s">' % b)
# fin du formulaire # fin du formulaire
page.add('</form>') page.add('</form>')
# bouton quitter # menu de fin de page
page.add("""<center> page.add( "<center><table><tr><td>%s</td><td>%s</td><td>%s</td></tr></center>" % ( bouton(url,sid,'liste-bornes','Actualiser'), bouton_menu, bouton_quitter ) )
<table><tr> action = ''
<td><form method="POST">
<input type="hidden" name="sid" value="%s"> ######################################################
<input type="hidden" name="action" value="liste"> # page : ajouter un machine temporaire
<input type="submit" value="Actualiser">
</form></td> if action == 'ajout-machine' and droits_ajout_temporaire :
<td><form method="POST"> machine_proprio = form.getvalue('machine_proprio','')
<input type="hidden" name="sid" value="%s"> machine_mac = form.getvalue('machine_mac','')
<input type="hidden" name="action" value="logout">
<input type="submit" value="Quitter">
</form></td>
</tr></table>
</center>
""" % (sid, sid) )
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('<automatique>').split('.')[3] )
m.save()
page.add('<font color="green">La machine de &quot;%s&quot; a bien &eacute;t&eacute; ajout&eacute;e,<br>l\'ajout sera pris en compte dans 10 minutes environ.</font><br><br>' % machine_proprio )
page.add('Adresse mac : %s<br>' % m.mac().encode('iso-8859-15'))
page.add('Adresse ip : %s<br>' % m.ip().encode('iso-8859-15'))
page.add('Nom de machine : %s<br><br>' % m.nom().encode('iso-8859-15'))
page.add('<center><table><tr><td>%s</td><td>%s</td><td>%s</td></tr></table></center>' % ( bouton(url,sid,'ajout-machine','Ajouter une autre machine'), bouton_menu, bouton_quitter))
affiche_formulaire = False
except ValueError, e:
page.add('<font color="red">ERREUR : %s</font><br><br>' % e.args[0].encode('iso-8859-15') )
if affiche_formulaire :
page.add("""<center>
<form action="%s" method="POST">
<input type="hidden" name="sid" value="%s">
<input type="hidden" name="action" value="ajout-machine">
<table>
<tr><td>Pr&eacute;nom Nom : </td><td><input type="text" name="machine_proprio" value="%s"></td></tr>
<tr><td>Adresse MAC : </td><td><input type="text" name="machine_mac" value="%s"></td></tr>
</table><br>
<input type="submit" value="Ajouter la machine"></form><br>
<table><tr><td>%s</td><td>%s</td></tr></table>
</center>
""" % (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("<font color=\"red\">Vous n'avez pas le droits d'effectuer cette op&eacute;ration</font><br><br>\n")
page.add('<center><a href="javascript:history.go(-1)">Retour</a></center><br>')
action = ''
######################################################
# page : index
if action == 'index' :
# menu principal
page.sous_titre("Menu principal")
if bornes_modifiables :
page.add('<a href="?sid=%s&action=liste-bornes">Activation/d&eacute;sactivation d\'une borne</a><br>' % sid )
if droits_ajout_temporaire :
page.add('<a href="?sid=%s&action=ajout-machine">Ajouter temporairement un machine</a><br>' % sid )
# menu de bas de page
page.add("<center>%s</center>" % bouton_quitter )
###################################################### ######################################################
# page : logout # page : logout
if action == 'logout' : if action == 'logout' :
log(sess.data['user'] + ' s\'est déconnecté' ) log(sess.data['user'] + ' s\'est déconnecté' )
page.sous_titre('See you soon') page.sous_titre('Session fermée...')
sess.destroy() sess.destroy()
###################################################### ######################################################

View file

@ -74,7 +74,7 @@ class html :
# division du contenu # division du contenu
page += "<div id=\"Contenu\" style=\"position:absolute; left:245px; top:190px; right:16px; z-index:1; overflow: visible; visibility: visible; background-color: #FFFFFF; layer-background-color: #FFFFFF;\">\n" page += "<div id=\"Contenu\" style=\"position:absolute; left:245px; top:190px; right:16px; z-index:1; overflow: visible; visibility: visible; background-color: #FFFFFF; layer-background-color: #FFFFFF;\">\n"
page += self._corp.encode('iso-8859-15') page += self._corp
page += "</div>\n\n" page += "</div>\n\n"
# fin de la page # fin de la page

View file

@ -4,36 +4,13 @@
# les mots de passe sont cryptés avec la commande : # les mots de passe sont cryptés avec la commande :
# python -c "import sha ; print sha.new('***').hexdigest()" # 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 # Liste des utilisateurs
######################## ########################
# premier champ : autorisation d'inscrire des machines temporaires True|False
# champs suivants : noms des bornes modifiables
users = { users = {
'bilou:b6831110716ea7782b636469b31dc3a695b26386' : [True] + bornes_ens, 'bilou:b6831110716ea7782b636469b31dc3a695b26386' : [True, 'ens'],
'vince||:7bc07c05eebf6726b48f557fcb60b434364034cd' : [True, 'valhalla','heimdall','vidar'] + bornes_ens, 'vince||:7bc07c05eebf6726b48f557fcb60b434364034cd' : [True, 'ens'],
'xabi:4f1da4cacfd69622c2123d83007a92f9e3de9722' : [True, 'heimdall'] 'xabi:4f1da4cacfd69622c2123d83007a92f9e3de9722' : [True, 'ens']
} }