Prise en charge de l'attribut mailExterieur comme redirection.
This commit is contained in:
parent
60d7087c60
commit
962d9df0f3
5 changed files with 100 additions and 54 deletions
|
@ -56,7 +56,9 @@ def try_decode(string):
|
|||
avoir en réception.
|
||||
|
||||
"""
|
||||
unicode_str = ""
|
||||
if isinstance(string, unicode):
|
||||
return string
|
||||
|
||||
try:
|
||||
return string.decode("UTF-8")
|
||||
except UnicodeDecodeError:
|
||||
|
|
|
@ -25,6 +25,7 @@ except:
|
|||
# Machine sans mailman, les ML ne seront pas reconfigurées
|
||||
pass
|
||||
|
||||
CONN = crans_ldap()
|
||||
|
||||
class del_user:
|
||||
""" Suppression des fichiers d'un compte utilisateur """
|
||||
|
@ -114,11 +115,15 @@ class home:
|
|||
for args in self.args:
|
||||
anim('\t' + args)
|
||||
try:
|
||||
try:
|
||||
home, uid, login, mail_redirect = args.split(',')
|
||||
except ValueError:
|
||||
home, uid, login = args.split(',')
|
||||
mail_redirect = None
|
||||
login, oldLogin, oldHome = args.split(",")
|
||||
if login:
|
||||
adh = CONN.search("uid=%s" % (uid,))['adherent'][0]
|
||||
home = adh.home()
|
||||
uid = adh.uidNumber()
|
||||
mail_redirect = adh.email_exterieur()
|
||||
if oldHome and hostname == "zbee":
|
||||
home_service = del_user([oldLogin, oldHome])
|
||||
home_service.delete_zbee()
|
||||
homesplit = home.split("/")
|
||||
symlink = "/home-adh/%s" % (homesplit[-1],)
|
||||
### Home
|
||||
|
|
|
@ -392,11 +392,11 @@ def set_etudes(adher):
|
|||
dialog(arg)
|
||||
return set_etudes(adher)
|
||||
|
||||
def set_mail(adher):
|
||||
def set_contact(adher):
|
||||
u"""
|
||||
Choix d'une adresse mail crans ou extérieure.
|
||||
Retourne ensuite le résultat de :
|
||||
* set_mail_ext si adresse ext
|
||||
* set_mail si adresse ext
|
||||
* set_compte si compte crans
|
||||
"""
|
||||
if u'Nounou' in adher.droits() and not isadm:
|
||||
|
@ -406,7 +406,7 @@ def set_mail(adher):
|
|||
return
|
||||
|
||||
if not isinstance(adher, Club) and not adher.adherentPayant():
|
||||
set_mail_ext(adher)
|
||||
set_mail(adher)
|
||||
return
|
||||
|
||||
while 1:
|
||||
|
@ -426,31 +426,72 @@ def set_mail(adher):
|
|||
elif result[0].split()[1] == u'un':
|
||||
if not set_compte(adher): break
|
||||
else:
|
||||
if not set_mail_ext(adher): break
|
||||
if not set_mail(adher): break
|
||||
|
||||
def set_mail_ext(adher):
|
||||
u"""
|
||||
Demande l'adresse mail extérieure d'un adhérent
|
||||
def set_mail(adher):
|
||||
"""Demande l'adresse mail extérieure d'un adhérent
|
||||
"""
|
||||
default = adher.mail()
|
||||
if default.endswith('@crans.org'):
|
||||
# C'était une adresse crans
|
||||
default = ''
|
||||
|
||||
arg = u'--title "Adresse mail extérieure pour %s" ' % adher.Nom()
|
||||
arg = u'--title "Adresse mail pour %s" ' % adher.Nom()
|
||||
arg += u'--inputbox "Adresse : " 0 0 "%s"' % default
|
||||
annul, result = dialog(arg)
|
||||
if annul: return 1
|
||||
|
||||
try: adher.mail(result[0])
|
||||
except ValueError, c:
|
||||
arg = u'--title "Adresse mail de %s" ' % adher.Nom()
|
||||
arg += u'--msgbox "%s\n\n\n" 0 0' % to_unicode(c.args[0])
|
||||
dialog(arg)
|
||||
return set_mail(adher)
|
||||
|
||||
def set_mail_ext(adher):
|
||||
"""Récupère une éventuelle adresse de redirection en cas de choix de compte
|
||||
Crans. Permet en règle générale d'ajouter un mail extérieur au moins pour
|
||||
les récupérations de mot de passe ou autre.
|
||||
|
||||
"""
|
||||
if not adher.compte():
|
||||
return 0
|
||||
|
||||
if u'Nounou' in adher.droits() and not isadm:
|
||||
arg = u'--title "Adresse mail extérieure de %s" ' % adher.Nom()
|
||||
arg += u'--msgbox "Vous n\'avez pas les droits necessaires pour effectuer cette opération.\n\n\n" 0 0'
|
||||
dialog(arg)
|
||||
return
|
||||
|
||||
no = False
|
||||
|
||||
if 'compte' in adher.modifs:
|
||||
arg = u'--title "Redirection des mails de %s" ' % (adher.Nom(),)
|
||||
arg += u'--colors --yesno '
|
||||
arg += u'"L\'adhérent souhaite-t-il mettre en place une redirection de ses emails vers une autre boîte ?\n'
|
||||
arg += u'Cette redirection lui permettra aussi de récupérer son mot de passe Crans en cas de perte de celui-ci." '
|
||||
arg += u'0 0'
|
||||
no, _ = dialog(arg)
|
||||
|
||||
if no:
|
||||
return 0
|
||||
|
||||
arg = u'--title "Adresse mail extérieure pour %s" ' % adher.Nom()
|
||||
arg += u'--inputbox "Adresse : " 0 0 "%s"' % default
|
||||
annul, result = dialog(arg)
|
||||
if annul:
|
||||
return 1
|
||||
|
||||
try:
|
||||
adher.email_exterieur(result[0])
|
||||
except ValueError as c:
|
||||
arg = u'--title "Adresse mail extérieure de %s" ' % adher.Nom()
|
||||
arg += u'--msgbox "%s\n\n\n" 0 0' % to_unicode(c.args[0])
|
||||
dialog(arg)
|
||||
return set_mail_ext(adher)
|
||||
|
||||
def set_etat_civil(adher):
|
||||
u"""
|
||||
"""
|
||||
Modifie l'état-civil (nom, prénom) d'un adhérent.
|
||||
"""
|
||||
if u'Nounou' in adher.droits() and not isadm:
|
||||
|
@ -502,7 +543,7 @@ def set_etat_civil(adher):
|
|||
# L'utilisateur n'utilise pas son compte, on le supprime...
|
||||
adher.supprimer_compte()
|
||||
# ..et on le recrée (ou on met une adresse mail extérieure)
|
||||
if set_mail(adher):
|
||||
if set_contact(adher):
|
||||
# Le changement d'adresse a été annulé, on recommence tout
|
||||
adher.restore()
|
||||
return set_etat_civil(adher)
|
||||
|
@ -2027,7 +2068,7 @@ def new_adher(adher):
|
|||
* set_bases
|
||||
* set_etudes
|
||||
* set_admin
|
||||
* set_mail
|
||||
* set_contact
|
||||
* set_rque
|
||||
Retourne 1 si annulation.
|
||||
"""
|
||||
|
@ -2035,12 +2076,15 @@ def new_adher(adher):
|
|||
while True:
|
||||
if set_bases(adher): return 1
|
||||
|
||||
steps = [set_etudes,
|
||||
steps = [
|
||||
set_etudes,
|
||||
set_adhesion,
|
||||
set_connexion,
|
||||
set_admin,
|
||||
set_mail,
|
||||
set_rque]
|
||||
set_contact,
|
||||
set_mail_ext,
|
||||
set_rque,
|
||||
]
|
||||
|
||||
step = 0
|
||||
while step < len(steps):
|
||||
|
@ -2084,6 +2128,8 @@ def modif_adher(adher):
|
|||
arg += u'"Telephone" "Changement de numéro de téléphone" '
|
||||
if payant:
|
||||
arg += u'"Mail" "Créer un compte ou changer l\'adresse mail de contact" '
|
||||
if 'cransAccount' in adher._data['objectClass']:
|
||||
arg += u'"MailExt" "Ajouter une adresse mail de contact extérieur." '
|
||||
arg += u'"Alias" "Créer ou supprimer un alias mail" '
|
||||
arg += u'"GPGFingerprint" "Ajouter ou supprimer une empreinte GPG" '
|
||||
arg += u'"Remarque" "Ajouter ou modifer un commentaire" '
|
||||
|
@ -2111,7 +2157,9 @@ def modif_adher(adher):
|
|||
elif res[0] == 'Administratif':
|
||||
set_admin(adher)
|
||||
elif res[0] == 'Mail':
|
||||
set_mail(adher)
|
||||
set_contact(adher)
|
||||
elif res[0] == 'MailExt':
|
||||
set_mail_ext(adher)
|
||||
elif res[0] == 'Remarque':
|
||||
set_rque(adher)
|
||||
elif res[0] == 'Droits':
|
||||
|
|
|
@ -2043,34 +2043,18 @@ class BaseProprietaire(BaseClasseCrans):
|
|||
|
||||
# Faut-il créer un compte sur vert ?
|
||||
if 'compte' in self.modifs:
|
||||
compte = self._data.get('uid', [''])[0]
|
||||
if compte:
|
||||
ret += u'\nUn compte a été créé :\n login : %s\n' % self.compte()
|
||||
args = self._data['homeDirectory'][0] + ','
|
||||
args+= self._data['uidNumber'][0] + ','
|
||||
args+= self._data['uid'][0]
|
||||
r = prompt(u"Attribuer tout de suite un mot de passe ? [O/N]", "O")
|
||||
if r == 'O' or r == 'o':
|
||||
change_password(login=self.compte())
|
||||
else:
|
||||
ret += coul(u' Il faudra penser à attribuer un mot de passe\n', 'jaune')
|
||||
# Le deuxième argument est le potentiel chemin de l'ancien compte
|
||||
# s'il a jamais existé, ça permet de supprimer le home associé.
|
||||
args = "%s,%s" % (compte, self.modifs.get('compte', ''))
|
||||
|
||||
r = prompt(u"Redirection mail ? [O/N]")
|
||||
mail1 = mail2 = None
|
||||
if r.lower().startswith('o'):
|
||||
while True:
|
||||
mail1 = prompt(u"Adresse mail ? (ANNUL pour annuler la redirection)")
|
||||
if mail1 == "ANNUL":
|
||||
mail1 = None
|
||||
break
|
||||
try:
|
||||
validate_mail(mail1)
|
||||
except ValueError, e:
|
||||
print coul(e.message.encode('utf-8'), 'rouge')
|
||||
continue
|
||||
mail2 = prompt(u"Adresse mail (répéter) ?")
|
||||
if mail1 == mail2 and mail1:
|
||||
break
|
||||
if mail1:
|
||||
args += ',' + mail1
|
||||
self.services_to_restart('home', [ args ])
|
||||
|
||||
# Modif des droits ?
|
||||
|
@ -2269,7 +2253,7 @@ class Adherent(BaseProprietaire):
|
|||
if new == None:
|
||||
email = self._data.get('mail', [''])[0]
|
||||
if not '@' in email:
|
||||
return decode(email)+'@crans.org'
|
||||
return decode(email) + '@crans.org'
|
||||
else:
|
||||
return decode(email)
|
||||
|
||||
|
@ -2451,6 +2435,8 @@ class Adherent(BaseProprietaire):
|
|||
raise ValueError(u"Le solde d'un adhérent doit être nul pour supprimer son compte crans.")
|
||||
self._data['objectClass'] = ['adherent']
|
||||
|
||||
if not 'compte' in self.modifs:
|
||||
self.modifs['compte'] = "%s,%s" % (self.compte(), self.home())
|
||||
for c in [ 'uid', 'cn', 'shadowLastChange', 'shadowMax',
|
||||
'shadowWarning', 'loginShell', 'userPassword',
|
||||
'uidNumber', 'gidNumber', 'homeDirectory', 'gecos',
|
||||
|
@ -2567,7 +2553,7 @@ class Adherent(BaseProprietaire):
|
|||
|
||||
self._data['mail'] = ["%s@crans.org" % (login)]
|
||||
if not 'compte' in self.modifs:
|
||||
self.modifs.setdefault('compte', None)
|
||||
self.modifs.setdefault('compte', '')
|
||||
|
||||
# Création de l'alias canonique
|
||||
if self.nom() and self.prenom():
|
||||
|
@ -2904,7 +2890,7 @@ class Club(BaseProprietaire):
|
|||
self.lock('mail', login)
|
||||
|
||||
if not 'compte' in self.modifs:
|
||||
self.modifs.setdefault('compte', None)
|
||||
self.modifs.setdefault('compte', '')
|
||||
|
||||
self._data['objectClass'] = ['club', 'cransAccount', 'posixAccount', 'shadowAccount']
|
||||
self._data['uid'] = [ login ]
|
||||
|
|
|
@ -547,6 +547,11 @@ def adher_details(adher) :
|
|||
f += GL
|
||||
f += RMH
|
||||
f += u'\n'
|
||||
if adher.email_exterieur():
|
||||
f += coul(u'Mail extérieur : ', 'gras')
|
||||
f += adher.email_exterieur()
|
||||
f += u'\n'
|
||||
# Réservé aux comptes Crans.
|
||||
if len(adher.gpgFingerprint()) > 0:
|
||||
f += u"\n".join([coul(u'Fingerprint GPG : ', 'gras') + u"%s" % (i) for i in adher.gpgFingerprint()])+"\n"
|
||||
try:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue