Classe BorneWifi.
darcs-hash:20060302155728-68412-e2be9bb3a445573dbb34adddfe21be33ca96de96.gz
This commit is contained in:
parent
32d2199d4b
commit
be3d9b49b0
3 changed files with 150 additions and 129 deletions
|
@ -28,7 +28,7 @@ import re
|
|||
|
||||
import affich_tools, config
|
||||
from lock import make_lock, remove_lock
|
||||
from ldap_crans import adherent, machine, crans_ldap, crans, club, blacklist_items, isadm, isdeconnecteur, ann_scol, droits_possibles, smtpserv, script_utilisateur
|
||||
from ldap_crans import adherent, Machine, BorneWifi, crans_ldap, crans, club, blacklist_items, isadm, isdeconnecteur, ann_scol, droits_possibles, smtpserv, script_utilisateur
|
||||
|
||||
def dialog(arg) :
|
||||
return affich_tools.dialog(u'Gestion des adhérents et machines du Crans',arg)
|
||||
|
@ -1178,7 +1178,7 @@ def set_machine(machine) :
|
|||
arg+= u'"PortsTCP machine->ext :" 5 1 "%s" 5 25 50 0 ' % machine.portTCPout()
|
||||
arg+= u'"PortsUDP ext->machine :" 6 1 "%s" 6 25 50 0 ' % machine.portUDPin()
|
||||
arg+= u'"PortsUDP machine->ext :" 7 1 "%s" 7 25 50 0 ' % machine.portUDPout()
|
||||
if machine.puissance()!=None and isadm :
|
||||
if isinstance(machine, BorneWifi) and isadm :
|
||||
# Borne wifi
|
||||
p = u'Mettre le lieu de la borne comme première remarque.'
|
||||
arg+= u'"Canaux :" 2 35 "%s" 2 43 14 0 ' % machine.canal(None,False)
|
||||
|
@ -1230,7 +1230,7 @@ def set_machine(machine) :
|
|||
machine.portUDPout(result[6])
|
||||
except ValueError, c : err += c.args[0] + '\n'
|
||||
|
||||
if isadm and machine.puissance()!=None :
|
||||
if isadm and isinstance(machine, BorneWifi):
|
||||
try : machine.canal(result[7])
|
||||
except ValueError, c : err += c.args[0] + '\n'
|
||||
try : machine.puissance(result[8])
|
||||
|
@ -1828,13 +1828,13 @@ def menu_principal() :
|
|||
|
||||
elif choix=='aKM' :
|
||||
# Ajout machine au crans
|
||||
becane = machine(crans(),"fixe")
|
||||
becane = Machine(crans(),"fixe")
|
||||
if set_machine(becane) :
|
||||
becane.restore()
|
||||
|
||||
elif choix=='aKB' :
|
||||
# Ajout borne wifi
|
||||
becane = machine(crans(),"borne")
|
||||
becane = BorneWifi(crans(),"borne")
|
||||
if set_machine(becane) :
|
||||
becane.restore()
|
||||
|
||||
|
@ -1901,9 +1901,9 @@ def menu_principal() :
|
|||
choix = 'Wifi'
|
||||
try :
|
||||
if choix=='Fixe' :
|
||||
becane = machine(proprio,'fixe')
|
||||
becane = Machine(proprio, 'fixe')
|
||||
elif choix=='Wifi' :
|
||||
becane = machine(proprio,'wifi')
|
||||
becane = Machine(proprio, 'wifi')
|
||||
except ValueError, c:
|
||||
arg = '--title "Nouvelle machine" '
|
||||
arg += '--msgbox "%s\n\n\n" 0 0' % c.args[0]
|
||||
|
|
|
@ -639,7 +639,10 @@ class crans_ldap:
|
|||
# Il n'y avait seulement un filtre machine
|
||||
# => on retourne uniquement les machines trouvées
|
||||
for m in r['machine']:
|
||||
result['machine'].append(machine(m,mode,self.conn) )
|
||||
if m[1].has_key('puissance'):
|
||||
result['machine'].append(BorneWifi(m, mode, self.conn))
|
||||
else:
|
||||
result['machine'].append(Machine(m, mode, self.conn))
|
||||
elif not r['machine']:
|
||||
# Il n'y avait pas de filtre machine
|
||||
# => on retourne uniquement les adhérents
|
||||
|
@ -678,7 +681,10 @@ class crans_ldap:
|
|||
dn = string.join(a[0].split(',')[-4:],',')
|
||||
if dn in bons_dn and not a[0] in bons_dn2:
|
||||
bons_dn2.append(dn)
|
||||
result['machine'].append(machine(a,mode,self.conn) )
|
||||
if a[1].has_key('puissance'):
|
||||
result['machine'].append(BorneWifi(a, mode, self.conn))
|
||||
else:
|
||||
result['machine'].append(Machine(a, mode, self.conn))
|
||||
|
||||
else:
|
||||
### Recherche d'une chaine sur tous les champs
|
||||
|
@ -1206,7 +1212,10 @@ class base_proprietaire(base_classes_crans):
|
|||
res = []
|
||||
try:
|
||||
for r in self.conn.search_s('%s=%s,%s' % ( self.idn,self.id() , self.base_dn ),1,'objectClass=machine'):
|
||||
res.append(machine(r, self._modifiable,self.conn) )
|
||||
if r[1].has_key('puissance'):
|
||||
res.append(BorneWifi(r, self._modifiable, self.conn))
|
||||
else:
|
||||
res.append(Machine(r, self._modifiable, self.conn))
|
||||
return res
|
||||
except:
|
||||
return []
|
||||
|
@ -2029,23 +2038,25 @@ class club(base_proprietaire):
|
|||
""" Retourne l'adresse mail du responsable """
|
||||
return self.responsable().email()
|
||||
|
||||
class machine(base_classes_crans):
|
||||
class Machine(base_classes_crans):
|
||||
""" Classe de définition d'une machine """
|
||||
idn = 'mid'
|
||||
|
||||
def __init__(self,parent_or_tuple,typ='fixe',conn=None):
|
||||
def __init__(self, parent_or_tuple, typ='fixe', conn=None):
|
||||
"""
|
||||
parent_or_tuple est :
|
||||
*soit une instance d'une classe pouvant posséder une machine
|
||||
(adherent, club ou crans), la nouvelle machine lui sera alors associé.
|
||||
*soit directement le tuple définissant une machine (tel que
|
||||
retourné par les fonctions de recherche ldap)
|
||||
typ permet de définir le type de machine : wifi ou fixe,
|
||||
pris en compte uniquement pour une nouvelle machine (parent donné)
|
||||
|
||||
* soit une instance d'une classe pouvant posséder une machine
|
||||
(adherent, club ou crans), la nouvelle machine lui sera alors
|
||||
associée.
|
||||
* soit directement le tuple définissant une machine (tel que
|
||||
retourné par les fonctions de recherche ldap)
|
||||
typ permet de définir le type de machine : wifi ou fixe,
|
||||
pris en compte uniquement pour une nouvelle machine (parent donné)
|
||||
|
||||
Pour édition d'une machine, typ devra être égal à 'w'
|
||||
Attention, si typ ='w' mais si l'objet est déja locké il n'y a pas d'erreur
|
||||
vérifier l'obtetion du lock grace à la valeur de _modifiable (si =w c'est bon)
|
||||
Attention, si typ ='w' mais si l'objet est déja locké il n'y a pas
|
||||
d'erreur, vérifier l'obtention du lock grâce à la valeur de _modifiable
|
||||
(si ='w' c'est bon)
|
||||
|
||||
conn est une instance de la classe de connexion à la base LDAP
|
||||
"""
|
||||
|
@ -2064,7 +2075,8 @@ class machine(base_classes_crans):
|
|||
self._modifiable = 0
|
||||
else:
|
||||
self._modifiable = 0
|
||||
self._init_data = parent_or_tuple[1].copy() # Utile pour construire l'instruction LDAP de modif
|
||||
# Utile pour construire l'instruction LDAP de modif
|
||||
self._init_data = parent_or_tuple[1].copy()
|
||||
self._data = parent_or_tuple[1]
|
||||
|
||||
# Type de machine
|
||||
|
@ -2109,7 +2121,7 @@ class machine(base_classes_crans):
|
|||
""" Retourne le nom de la machine """
|
||||
return self.nom()
|
||||
|
||||
def mac(self,mac=None,multi_ok=0):
|
||||
def mac(self, mac=None, multi_ok=0):
|
||||
"""
|
||||
Défini ou retourne l'adresse mac de la machine
|
||||
Adresse valide si:
|
||||
|
@ -2119,7 +2131,7 @@ class machine(base_classes_crans):
|
|||
Si multi_ok = 1 permet d'avoir plusieur fois la même mac sur le réseau
|
||||
"""
|
||||
|
||||
if mac==None:
|
||||
if mac == None:
|
||||
return decode(self._data.get('macAddress',[''])[0])
|
||||
|
||||
mac = format_mac(mac)
|
||||
|
@ -2135,7 +2147,7 @@ class machine(base_classes_crans):
|
|||
raise ValueError(u"Il s'agit de l'adresse MAC d'une interface PPP.", 2)
|
||||
|
||||
# Le test final : vendeur connu
|
||||
prefix=mac[:8].upper() + ' '
|
||||
prefix = mac[:8].upper() + ' '
|
||||
vendor = ''
|
||||
try:
|
||||
for line in open('/usr/scripts/gestion/ethercodes.dat').readlines():
|
||||
|
@ -2155,13 +2167,7 @@ class machine(base_classes_crans):
|
|||
self._set('macAddress',[mac])
|
||||
return mac
|
||||
|
||||
def mac2(self):
|
||||
"""Retourne l'adresse MAC + 2"""
|
||||
mac = self.mac().split(":")
|
||||
mac[-1] = "%0.2x" % (int(mac[-1], 16) + 2)
|
||||
return ":".join(mac)
|
||||
|
||||
def __host_alias(self,champ,new):
|
||||
def __host_alias(self, champ, new):
|
||||
""" Vérification de la validité d'un nom de machine """
|
||||
# Supression des accents
|
||||
new = strip_accents(unicode(new,'iso-8859-15'))
|
||||
|
@ -2186,14 +2192,14 @@ class machine(base_classes_crans):
|
|||
raise ValueError(u"Le premier caractère du champ %s doit être alphanumérique" % champ)
|
||||
|
||||
# Ajout du domaine si necessaire
|
||||
if new.find('.')==-1:
|
||||
if new.find('.') == -1:
|
||||
try:
|
||||
new += '.' + config.domains[self.__typ]
|
||||
except:
|
||||
raise RuntimeError(u"%s : domaine non trouvé" % champ.capitalize() )
|
||||
|
||||
# Pas déja pris ?
|
||||
if self.exist('(|(host=%s)(hostAlias=%s))' % (new,new)):
|
||||
if self.exist('(|(host=%s)(hostAlias=%s))' % (new, new)):
|
||||
raise ValueError(u"%s : nom déjà pris" % champ.capitalize())
|
||||
|
||||
# Lock host
|
||||
|
@ -2201,7 +2207,7 @@ class machine(base_classes_crans):
|
|||
|
||||
return new
|
||||
|
||||
def nom(self,new=None):
|
||||
def nom(self, new=None):
|
||||
"""
|
||||
Défini ou retourne le nom de machine.
|
||||
Un nom de machine valide ne comporte que des caractères
|
||||
|
@ -2277,7 +2283,7 @@ class machine(base_classes_crans):
|
|||
self._set('hostAlias',liste)
|
||||
return liste
|
||||
|
||||
def ip(self,ip=None):
|
||||
def ip(self, ip=None):
|
||||
"""
|
||||
Défini ou retourne l'IP de la machine.
|
||||
Les IP sont stoquées sous forme xxx.xxx.xxx.xxx et doivent être fournies ainsi.
|
||||
|
@ -2364,7 +2370,7 @@ class machine(base_classes_crans):
|
|||
self._set('ipHostNumber',[ip])
|
||||
return ip
|
||||
|
||||
def exempt(self,new=None):
|
||||
def exempt(self, new=None):
|
||||
"""
|
||||
Liste des réseaux vers lesquels on ne compte pas l'upload
|
||||
Cette liste est transférée dans la base postgres de komaz
|
||||
|
@ -2375,11 +2381,11 @@ class machine(base_classes_crans):
|
|||
l'index est celui obtenu dans la liste retournée par exempt()
|
||||
"""
|
||||
if not self._data.has_key('exempt'):
|
||||
self._data['exempt']=[]
|
||||
self._data['exempt'] = []
|
||||
liste = list(self._data['exempt'])
|
||||
if new==None: return map(decode,liste)
|
||||
if new == None: return map(decode, liste)
|
||||
|
||||
if type(new)==list:
|
||||
if type(new) == list:
|
||||
# Modif
|
||||
index = new[0]
|
||||
l, new = preattr(new[1])
|
||||
|
@ -2388,8 +2394,8 @@ class machine(base_classes_crans):
|
|||
liste.pop(index)
|
||||
else:
|
||||
# Modif remarque
|
||||
liste[index]=new
|
||||
elif type(new)==str:
|
||||
liste[index] = new
|
||||
elif type(new) == str:
|
||||
# Réseau supplémentaire
|
||||
l, new = preattr(new)
|
||||
if not new:
|
||||
|
@ -2420,7 +2426,7 @@ class machine(base_classes_crans):
|
|||
|
||||
return self.__proprietaire
|
||||
|
||||
def ipsec(self,clef=0):
|
||||
def ipsec(self, clef=0):
|
||||
""" Génération (clef=1) ou affichage de la clef IPsec de la machine
|
||||
Si clef!=1: prend la clef fournie.
|
||||
"""
|
||||
|
@ -2438,83 +2444,7 @@ class machine(base_classes_crans):
|
|||
|
||||
self._set('ipsec',[clef])
|
||||
|
||||
return clef
|
||||
|
||||
def canal(self,new=None,raw=False):
|
||||
""" Attribution ou visualisation du canal d'une borne wifi """
|
||||
if self.__typ != 'borne': return None
|
||||
if not new:
|
||||
canaux = self._data.get('canal',[''])[0]
|
||||
if raw:
|
||||
return canaux
|
||||
else:
|
||||
canaux = int(canaux)
|
||||
if canaux < 14:
|
||||
# Compatibilité ascendante
|
||||
return str(canaux)
|
||||
lcanal1 = []
|
||||
for i in range(1,14):
|
||||
found = False
|
||||
if canaux & (1 << (i - 1)):
|
||||
lcanal2 = []
|
||||
for c in lcanal1:
|
||||
if c[1] == i - 1:
|
||||
lcanal2.append((c[0], i))
|
||||
found = True
|
||||
else:
|
||||
lcanal2.append(c)
|
||||
if not found:
|
||||
lcanal2.append((i,i))
|
||||
lcanal1 = lcanal2
|
||||
lcanal3 = []
|
||||
for c in lcanal1:
|
||||
if c[0] == c[1]:
|
||||
lcanal3.append("%d" % c[0])
|
||||
else:
|
||||
lcanal3.append("%d-%d" % (c[0],c[1]))
|
||||
return ",".join(lcanal3)
|
||||
|
||||
|
||||
try:
|
||||
new = int(new)
|
||||
if new < 0 or new > 13: raise
|
||||
except:
|
||||
# Nouveau système, il doit s'agir d'une liste de canaux
|
||||
try:
|
||||
lcanal3 = str(new).split(",")
|
||||
lcanal = []
|
||||
for c in lcanal3:
|
||||
c2 = c.split("-")
|
||||
if len(c2) == 1:
|
||||
lcanal.append(int(c2[0]))
|
||||
else:
|
||||
for i in range(int(c2[0]), int(c2[1]) + 1):
|
||||
lcanal.append(i)
|
||||
new = 0
|
||||
for c in lcanal:
|
||||
if c not in range(0,14):
|
||||
raise
|
||||
new = new + (1 << (c - 1))
|
||||
except:
|
||||
raise ValueError(u'Canal invalide : doit être entre 0 et 13 ou une liste de canaux')
|
||||
|
||||
self._set('canal',[str(new)])
|
||||
return new
|
||||
|
||||
def puissance(self,new=None):
|
||||
""" Attribution ou visualisation de la puissance d'une borne wifi """
|
||||
if self.__typ != 'borne': return None
|
||||
if not new:
|
||||
return self._data.get('puissance',[''])[0]
|
||||
|
||||
try:
|
||||
new = int(new)
|
||||
if new < -99 or new > 99: raise
|
||||
except:
|
||||
raise ValueError(u'Puissance invalide : doit être entre -99 et 99')
|
||||
|
||||
self._set('puissance',[str(new)])
|
||||
return new
|
||||
return clef
|
||||
|
||||
def save(self):
|
||||
"""
|
||||
|
@ -2649,6 +2579,94 @@ class machine(base_classes_crans):
|
|||
if 'ports' not in self.modifs:
|
||||
self.modifs.setdefault('ports', None)
|
||||
|
||||
|
||||
class BorneWifi(Machine):
|
||||
""" Classe de définition d'une borne wifi """
|
||||
|
||||
def __init__(self, parent_or_tuple, typ='borne', conn=None):
|
||||
Machine.__init__(self, parent_or_tuple, typ, conn)
|
||||
|
||||
def mac2(self):
|
||||
""" Retourne l'adresse MAC + 2 """
|
||||
mac = self.mac().split(":")
|
||||
mac[-1] = "%0.2x" % (int(mac[-1], 16) + 2)
|
||||
return ":".join(mac)
|
||||
|
||||
def canal(self, new=None, raw=False):
|
||||
""" Attribution ou visualisation du canal d'une borne wifi """
|
||||
if not new:
|
||||
canaux = self._data.get('canal', [''])[0]
|
||||
if raw:
|
||||
return canaux
|
||||
else:
|
||||
canaux = int(canaux)
|
||||
if canaux < 14:
|
||||
# Compatibilité ascendante
|
||||
return str(canaux)
|
||||
lcanal1 = []
|
||||
for i in range(1, 14):
|
||||
found = False
|
||||
if canaux & (1 << (i - 1)):
|
||||
lcanal2 = []
|
||||
for c in lcanal1:
|
||||
if c[1] == i - 1:
|
||||
lcanal2.append((c[0], i))
|
||||
found = True
|
||||
else:
|
||||
lcanal2.append(c)
|
||||
if not found:
|
||||
lcanal2.append((i, i))
|
||||
lcanal1 = lcanal2
|
||||
lcanal3 = []
|
||||
for c in lcanal1:
|
||||
if c[0] == c[1]:
|
||||
lcanal3.append("%d" % c[0])
|
||||
else:
|
||||
lcanal3.append("%d-%d" % (c[0], c[1]))
|
||||
return ",".join(lcanal3)
|
||||
|
||||
|
||||
try:
|
||||
new = int(new)
|
||||
if new < 0 or new > 13: raise
|
||||
except:
|
||||
# Nouveau système, il doit s'agir d'une liste de canaux
|
||||
try:
|
||||
lcanal3 = str(new).split(",")
|
||||
lcanal = []
|
||||
for c in lcanal3:
|
||||
c2 = c.split("-")
|
||||
if len(c2) == 1:
|
||||
lcanal.append(int(c2[0]))
|
||||
else:
|
||||
for i in range(int(c2[0]), int(c2[1]) + 1):
|
||||
lcanal.append(i)
|
||||
new = 0
|
||||
for c in lcanal:
|
||||
if c not in range(0,14):
|
||||
raise
|
||||
new = new + (1 << (c - 1))
|
||||
except:
|
||||
raise ValueError(u'Canal invalide : doit être entre 0 et 13 ou une liste de canaux')
|
||||
|
||||
self._set('canal',[str(new)])
|
||||
return new
|
||||
|
||||
def puissance(self, new=None):
|
||||
""" Attribution ou visualisation de la puissance d'une borne wifi """
|
||||
if not new:
|
||||
return self._data.get('puissance', [''])[0]
|
||||
|
||||
try:
|
||||
new = int(new)
|
||||
if new < -99 or new > 99: raise
|
||||
except:
|
||||
raise ValueError(u'Puissance invalide : doit être entre -99 et 99')
|
||||
|
||||
self._set('puissance', [str(new)])
|
||||
return new
|
||||
|
||||
|
||||
class _fake_proprio(crans_ldap):
|
||||
""" Définitions de base d'un propriétaire virtuel """
|
||||
idn = ''
|
||||
|
@ -2672,7 +2690,10 @@ class _fake_proprio(crans_ldap):
|
|||
res = s.conn.search_s(s.dn,1,'objectClass=machine')
|
||||
m = []
|
||||
for r in res:
|
||||
m.append(machine(r,'',s.conn))
|
||||
if r[1].has_key('puissance'):
|
||||
m.append(BorneWifi(r, '', s.conn))
|
||||
else:
|
||||
m.append(Machine(r, '', s.conn))
|
||||
return m
|
||||
|
||||
class crans(_fake_proprio):
|
||||
|
@ -2688,7 +2709,7 @@ class crans(_fake_proprio):
|
|||
|
||||
class invite(_fake_proprio):
|
||||
""" Propriétaire des machines invité """
|
||||
def __init__(s,conn=None):
|
||||
def __init__(s, conn=None):
|
||||
s.conn = conn
|
||||
if not s.conn: s.connect()
|
||||
s.dn = "ou=invites," + s.base_dn
|
||||
|
|
|
@ -47,7 +47,7 @@ except:
|
|||
|
||||
base = None
|
||||
|
||||
from ldap_crans import is_actif , crans_ldap, ann_scol, crans, hostname
|
||||
from ldap_crans import is_actif, crans_ldap, ann_scol, crans, hostname, BorneWifi
|
||||
from affich_tools import *
|
||||
import user_tests
|
||||
import popen2, commands
|
||||
|
@ -453,10 +453,10 @@ def machine_details(machine) :
|
|||
f+= coul(u'mid=%s ' % machine.id(),'bleu')
|
||||
|
||||
# Type de machine
|
||||
if machine.ipsec() : a='Machine wifi'
|
||||
elif machine.canal() : a='Borne wifi'
|
||||
else : a='Machine fixe'
|
||||
f+= coul(a+' : ' ,'gras')
|
||||
if machine.ipsec(): a = 'Machine wifi'
|
||||
elif isinstance(machine, BorneWifi): a = 'Borne wifi'
|
||||
else: a = 'Machine fixe'
|
||||
f += coul(a + ' : ', 'gras')
|
||||
|
||||
f+= "%s\n" % machine.nom()
|
||||
|
||||
|
@ -494,7 +494,7 @@ def machine_details(machine) :
|
|||
f += '\n'
|
||||
|
||||
# Borne wifi
|
||||
if machine.puissance() :
|
||||
if isinstance(machine, BorneWifi):
|
||||
f += coul(u'Puissance : ','gras') + u"%4.d" % int(machine.puissance())
|
||||
f += coul(u'\tCanaux : ', 'gras') + machine.canal()
|
||||
f += coul(u'\tÉtat : ', 'gras')
|
||||
|
@ -683,7 +683,7 @@ def __bases_machines(m) :
|
|||
""" Retourne [ type de la machines, blacklist ] """
|
||||
#Type
|
||||
if m.ipsec() : t='wifi'
|
||||
elif m.canal() : t='born'
|
||||
elif isinstance(m, BorneWifi): t='born'
|
||||
else : t='fixe'
|
||||
|
||||
# Déconnectée ?
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue