You need to sign in or sign up before continuing.
Newer
Older
Conrad Holmberg
committed
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
78
#!/bin/env python
from mailmanclient import Client
# This program dumps all the user deails
# from a given email list into json outputself.
# The output json can then be taken as input and
import os
import sys
import time
import argparse
try:
import json
except ImportError:
import simplejson as json
def get_ml_fqdns(client):
ml_fqdns = []
for mlist in client.lists:
ml_fqdns.append(mlist.fqdn_listname)
return ml_fqdns
def dump_fqdn_members(client,ml_fqdn ):
"""Prints the members of a email list"""
# Get members from email list
member_list = client.get_list(ml_fqdn)
members_hash = {}
members_hash['members'] = []
# Get json data from each member
for member in member_list.members:
prefs = member.preferences # obtain member prrivilges
members_hash['members'].append({
'list_fqdn': args.list_fqdn,
'email': member.email,
'display_name': member.user.display_name,
#'password': member.user.password,
'preferences': {'delivery_mode': prefs['delivery_mode'],
'acknowledge_posts': prefs['acknowledge_posts'],
'delivery_status': prefs['delivery_status'],
'hide_address': prefs['hide_address'],
'preferred_language': prefs['preferred_language'],
'receive_list_copy': prefs['receive_list_copy'],
'receive_own_postings': prefs['receive_own_postings']
}
})
#print json.dumps(member.user.rest_data, indent=2)
print json.dumps(members_hash, indent=2)
# end dump_fqdn_memberss
def restore_members( input_file ):
"""Creates Code to Restore Members of a source/target email list."""
tgt_list = None
if input_file == '-':
json_file = sys.stdin
else:
user_file = input_file
with open(user_file) as json_file:
data = json.load(json_file)
#print json.dumps(datam, indent=2)
for src_member in data['members']:
if (tgt_list is None):
tgt_list = client.get_list(member['list_fqdn'])
# Get members from the current email list
tgt_members = [str(m.email) for m in ml.members]
# check on display_name is null or not
if src_member not in tgt_members:
if( src_member['display_name'] is not None):
display_name = src_member['display_name']
else:
display_name = 'display_name=None'
Conrad Holmberg
committed
# subscribe member to list
test_one.subscribe(src_member['email'],
display_name,
pre_verified=True)
Conrad Holmberg
committed
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# set the preferences
tgt_prefs = tgt_list.get_member(src_member['email']).preferences
tgt_prefs['delivery_mode'] = src_member['delivery_mode']
tgt_prefs['acknowledge_posts'] = src_member['acknowledge_posts']
tgt_prefs['delivery_status'] = src_member['delivery_status']
tgt_prefs['hide_address'] = src_member['hide_address']
tgt_prefs['preferred_language'] = src_member['preferred_language']
tgt_prefs['receive_list_copy'] = src_member['receive_list_copy']
tgt_prefs['receive_own_postings'] = src_member['receive_own_postings']
tgt_prefs.save()
#print('email: '+ src_member['email'])
#print('password: '+ member['password'])
#new_member_list.append(member_email)
if input_file != '-':
json_file.close()
#end restore_members
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="Manage Users in Mailman Email Lists.")
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')
# Default Email list
LIST_NAME = 'apachesvn@lists.med.stanford.edu'
# user invoked variables
parser.add_argument('-l','--list-fqdn')
parser.add_argument('-r','--restore')
# Add arguments for env variables
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)
# Parse out the command line arguments
Conrad Holmberg
committed
#args = parser.parse_args()
Conrad Holmberg
committed
# Set the mailman client
client = Client(args.core_uri, args.core_user, args.core_password)
# append the mail lists to an array from client
ml_fqdns = get_ml_fqdns(client)
# lists members of a list
if args.list_fqdn:
# used to store members
ml_fqdn = args.list_fqdn
# get members from list
if ml_fqdn in ml_fqdns:
dump_fqdn_members(client,ml_fqdn)
else:
sys.exit('Error: Email list"'+ml_fqdn+'" does not exist in domain '+args.core_uri +
"\nSee List\n"+str(ml_fqdns))
#end if
elif args.restore:
restore_members( args.restore)