]>
gitweb.pimeys.fr Git - scripts-20-100.git/blob - mailman_bad_guys.py
4 ## TODO : Supprimer aussi les modérateurs/administrateurs
5 """Pour trouver dans quelle(s) ML(s) est quelqu'un et l'en virer.
7 À exécuter sur redisdead.
10 from __future__
import print_function
13 if socket
.gethostname() != "redisdead":
14 print("Not on redisdead, might not work")
18 sys
.path
.append("/var/lib/mailman/bin")
21 #from Mailman import mm_cfg
22 from Mailman
import MailList
23 from Mailman
import Utils
26 """Donne la liste des MLs"""
27 return [unicode(n
) for n
in Utils
.list_names()]
30 """Donne [la liste des membres de ``ml``, la liste de ses admins, la liste de ses modérateurs].
31 Deals with fucking unicode problems."""
32 ml
= MailList
.MailList(ml
, lock
=False)
33 rmembers
= ml
.getRegularMemberKeys()
34 dmembers
= ml
.getDigestMemberKeys()
35 members
= rmembers
+ dmembers
36 members
= [s
if isinstance(s
, unicode) else s
.decode("utf-8") for s
in members
]
37 admins
= [i
for i
in ml
.owner
]
38 moderators
= [i
for i
in ml
.moderator
]
39 return [members
, admins
, moderators
]
42 """Retourne un dico nom_de_ml -> [membres, admins, moderateurs]"""
43 return {n
: list_members(n
) for n
in list_lists()}
45 def get_field_from_mail(mail
, fieldno
, all
=None):
46 """Retourne la liste des mls dont mail est :
47 * membre si ``fieldno`` = 1
50 Calcule le dico ``all`` si on ne lui donne pas."""
53 return [n
for (n
, fields
) in all
.iteritems() if mail
in fields
[fieldno
]]
55 def get_mls_from_mail(mail
, all
=None):
56 """Retourne la liste des mls auxquelles est abonné ``mail``."""
57 return get_field_from_mail(mail
, 0, all
)
59 def get_admins_from_mail(mail
, all
=None):
60 """Retourne la liste des mls dont ``mail`` est admin."""
61 return get_field_from_mail(mail
, 1, all
)
63 def get_moderators_from_mail(mail
, all
=None):
64 """Retourne la liste des mls dont ``mail`` est admin."""
65 return get_field_from_mail(mail
, 2, all
)
67 def exterminate(mail
, ml
):
68 """Désabonne ``mail`` de ``ml``.
69 Pas de notification à mail, mais à l'admin."""
70 l
= MailList
.MailList(ml
.encode(), lock
=True)
71 l
.DeleteMember(mail
.encode(), admin_notif
="prout", userack
=False)
75 def exterminate_this_guy(bad_guy
, dico
=None):
76 """Trouve les MLs auxquelles est abonné ``bad_guy`` et l'en supprime en demandant confirmation."""
77 mls
= get_mls_from_mail(bad_guy
, dico
)
80 print("Exterminating %s from %s" % (bad_guy
, ", ".join(mls
)))
81 answer
= raw_input("[y/n] ?")
82 if answer
.lower() == "y":
84 exterminate(bad_guy
, n
)
86 print("No mailing list found")
88 if __name__
== "__main__":
89 bad_guy
= sys
.argv
[1].decode("utf-8").lower()
90 exterminate_this_guy(bad_guy
)