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
# -*- 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 '<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
@ -45,12 +85,33 @@ 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=<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 :
# erreur d'authentification
###########################
log(sess.data['user'] + ' erreur d\'authentification' )
page.add('<font color="red">Erreur d\'authentification !</font><br><br>')
action = 'auth'
@ -71,11 +132,12 @@ if action == 'auth' :
</form>
</center>
""" % 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('<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 :
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('<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'
######################################################
# 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('<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 :
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('<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
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('<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">')
else :
# 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('<br>')
# commentaires
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>')
# bouton de validation
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 :
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
page.add('</form>')
# bouton quitter
page.add("""<center>
<table><tr>
<td><form method="POST">
# menu de fin de page
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 ) )
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('<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="liste">
<input type="submit" value="Actualiser">
</form></td>
<td><form method="POST">
<input type="hidden" name="sid" value="%s">
<input type="hidden" name="action" value="logout">
<input type="submit" value="Quitter">
</form></td>
</tr></table>
<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>
""" % (sid, sid) )
""" % (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
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()
######################################################

View file

@ -74,7 +74,7 @@ class html :
# 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 += self._corp.encode('iso-8859-15')
page += self._corp
page += "</div>\n\n"
# fin de la page

View file

@ -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']
}