/
sync_users.py
executable file
·77 lines (66 loc) · 2.94 KB
/
sync_users.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/bin/env python
from mailmanclient import Client
import os
import sys
import argparse
import time
import datetime
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="Sync member list")
CORE_URI = os.environ.get('MAILMAN_CORE_URI',
'http://mailman-core:8001/3.1')
CORE_USER = os.environ.get('MAILMAN_REST_USER', 'restadmin')
CORE_PASS = os.environ.get('MAILMAN_REST_PASSWORD', 'restpass')
parser.add_argument('list_fqdn')
parser.add_argument('--members-file', dest='list', default=None)
parser.add_argument('--core-uri', dest='core_uri',
default=CORE_URI)
parser.add_argument('--rest-user', dest='core_user',
default=CORE_USER)
parser.add_argument('--rest-password', dest='core_password',
default=CORE_PASS)
args = parser.parse_args()
client = Client(args.core_uri, args.core_user, args.core_password)
ml_fqdn = args.list_fqdn
ml = client.get_list(ml_fqdn)
current_members = [str(m.address) for m in ml.members]
new_member_list = []
new_member_names = {}
if args.list:
if args.list == '-':
list_file = sys.stdin
else:
list_file = open(args.list, 'r')
else:
list_file = sys.stdin
for l in list_file:
member_email = l.split('<')[1].split('>')[0].strip()
member_name = l.split('<')[0].strip()
new_member_list.append(member_email)
new_member_names[member_email] = member_name
if args.list and args.list != '-':
list_file.close()
for member_email in current_members:
if member_email not in new_member_list:
try:
ml.unsubscribe(member_email)
st = datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')
print("["+st+"] Removed %s" % (member_email))
except:
st = datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')
print("["+st+"] Exception %s" % (member_email))
for member_email in new_member_list:
if member_email not in current_members:
try:
try:
user = client.get_user(member_email)
except:
member_name = new_member_names[member_email]
user = client.create_user(email=member_email, display_name=member_name, password=None)
ml.subscribe(member_email, display_name=member_name, pre_verified=True, pre_confirmed=True, pre_approved=True)
current_members.append(member_email)
st = datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')
print("["+st+"] Added %s" % (member_email))
except:
st = datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')
print("["+st+"] Invalid %s" % (member_email))