Synchro des ML avec les droits.
darcs-hash:20040907101653-41617-f85bada9023467dccb92930336376ef3cd255eff.gz
This commit is contained in:
parent
41fda80ee0
commit
1f30038ba9
1 changed files with 79 additions and 3 deletions
|
@ -4,9 +4,16 @@
|
||||||
import sys, signal
|
import sys, signal
|
||||||
from gen_confs import gen_config, anim, cprint, OK, ERREUR
|
from gen_confs import gen_config, anim, cprint, OK, ERREUR
|
||||||
|
|
||||||
|
# Imports pour LDAP
|
||||||
sys.path.append('/usr/scripts/gestion')
|
sys.path.append('/usr/scripts/gestion')
|
||||||
from ldap_crans import crans_ldap, crans, ann_scol, preattr, ldap
|
from ldap_crans import crans_ldap, crans, ann_scol, preattr, ldap
|
||||||
|
|
||||||
|
# Imports pour mailman
|
||||||
|
sys.path.append('/usr/lib/mailman')
|
||||||
|
from Mailman import MailList
|
||||||
|
from Mailman import Utils
|
||||||
|
from Mailman.UserDesc import UserDesc
|
||||||
|
|
||||||
class droits(crans_ldap,gen_config) :
|
class droits(crans_ldap,gen_config) :
|
||||||
####### Les groupes
|
####### Les groupes
|
||||||
base_group_dn = 'ou=Group,dc=crans,dc=org'
|
base_group_dn = 'ou=Group,dc=crans,dc=org'
|
||||||
|
@ -25,8 +32,8 @@ class droits(crans_ldap,gen_config) :
|
||||||
mailing_listes = { 'roots' : [ u'Nounou', u'Apprenti' ],
|
mailing_listes = { 'roots' : [ u'Nounou', u'Apprenti' ],
|
||||||
'+nounou' : [ u'Nounou', u'Apprenti' ],
|
'+nounou' : [ u'Nounou', u'Apprenti' ],
|
||||||
'respbats' : [ u'Câbleur', u'Nounou' ],
|
'respbats' : [ u'Câbleur', u'Nounou' ],
|
||||||
'moderateurs' : [ u'Modérateur' ],
|
'+moderateurs' : [ u'Modérateur' ],
|
||||||
'disconnect' : [ u'Déconnecteur' ] }
|
'+disconnect' : [ u'Déconnecteur' ] }
|
||||||
|
|
||||||
def restart(s) :
|
def restart(s) :
|
||||||
# Rien à faire
|
# Rien à faire
|
||||||
|
@ -63,6 +70,60 @@ class droits(crans_ldap,gen_config) :
|
||||||
modlist = ldap.modlist.modifyModlist(init_data,data)
|
modlist = ldap.modlist.modifyModlist(init_data,data)
|
||||||
self.conn.modify_s(dn,modlist)
|
self.conn.modify_s(dn,modlist)
|
||||||
|
|
||||||
|
|
||||||
|
def sync_ML(self) :
|
||||||
|
self.anim.iter = len( self.mailing_listes.keys() )
|
||||||
|
for ML, fonctions in self.mailing_listes.items() :
|
||||||
|
self.anim.cycle()
|
||||||
|
if ML[0] == '+' :
|
||||||
|
ML = ML[1:]
|
||||||
|
only_add = 1
|
||||||
|
else :
|
||||||
|
only_add = 0
|
||||||
|
|
||||||
|
# Instance correspondant à la ML
|
||||||
|
mlist = MailList.MailList(ML)
|
||||||
|
self.mlist_to_unlock = mlist
|
||||||
|
|
||||||
|
# Qui doit être dans cette ML ?
|
||||||
|
res = []
|
||||||
|
for f in fonctions :
|
||||||
|
res += self.search('droits=%s' % f)['adherent']
|
||||||
|
|
||||||
|
# Liste des personnes déja inscrites
|
||||||
|
deja_inscrits = {} # { email en miniscules : email avec case n'importe comment }
|
||||||
|
for addr in mlist.getMemberCPAddresses(mlist.getMembers()):
|
||||||
|
deja_inscrits[addr.lower()] = addr
|
||||||
|
|
||||||
|
# Mails à ajouter
|
||||||
|
to_add = []
|
||||||
|
mail_traite = []
|
||||||
|
for adher in res :
|
||||||
|
mail = adher.mail().lower()
|
||||||
|
if mail in mail_traite : continue
|
||||||
|
mail_traite.append(mail)
|
||||||
|
if mail.find('@') == -1 : mail += '@crans.org'
|
||||||
|
if mail not in deja_inscrits.keys() :
|
||||||
|
# Visiblement pas inscrit
|
||||||
|
to_add.append([ mail, adher.Nom() ])
|
||||||
|
else :
|
||||||
|
# L'adhérent est déja inscrit
|
||||||
|
deja_inscrits.pop(mail)
|
||||||
|
|
||||||
|
# Ajout
|
||||||
|
for mail, nom in to_add :
|
||||||
|
pw = Utils.MakeRandomPassword()
|
||||||
|
userdesc = UserDesc( mail, nom, pw)
|
||||||
|
mlist.ApprovedAddMember(userdesc)
|
||||||
|
if not only_add :
|
||||||
|
# Supression des personnes inscritees en trop
|
||||||
|
for mail in deja_inscrits.values() :
|
||||||
|
mlist.ApprovedDeleteMember(mail)
|
||||||
|
|
||||||
|
mlist.Save()
|
||||||
|
mlist.Unlock()
|
||||||
|
self.mlist_to_unlock = None
|
||||||
|
|
||||||
def gen_conf(self) :
|
def gen_conf(self) :
|
||||||
self.anim = anim('\tconfiguration groupes')
|
self.anim = anim('\tconfiguration groupes')
|
||||||
try :
|
try :
|
||||||
|
@ -77,4 +138,19 @@ class droits(crans_ldap,gen_config) :
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|
||||||
self.anim = anim('\tconfiguration ML Crans')
|
self.anim = anim('\tconfiguration ML Crans')
|
||||||
print 'TODO'
|
try :
|
||||||
|
self.sync_ML()
|
||||||
|
self.anim.reinit()
|
||||||
|
print OK
|
||||||
|
except :
|
||||||
|
self.anim.reinit()
|
||||||
|
try :
|
||||||
|
# Au cas où...
|
||||||
|
self.mlist_to_unlock.Unlock()
|
||||||
|
except :
|
||||||
|
pass
|
||||||
|
print ERREUR
|
||||||
|
if self.debug :
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue