#!/bin/env python from mailmanclient import Client 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 print_all_members(client): # grabs users per page """Prints all the members of the mailman with pagination.""" page = client.get_user_page(count=100, page=1) members_hash['members'] = [] # loop through each page while len(page) > 0: for member in page: print json.dumps(member.addresses.rest_data, indent=2) #TO DO add same json data ase print_fqdn_members # members_hash['members'].append({ # 'list_fqdn': args.list_fqdn, # 'email': member.email, # 'display_name': member.user.display_name # }) time.sleep(.100) #pause between pages page = page.next #print json.dumps(members_hash, indent=2) # end get_all_fqdns def print_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 = {} data = {} members_hash['members'] = [] # Get json data from each member for member in member_list.members: # members_hash['user']=member.user #members_hash['address']= member.address #members_hash['list_id']= member.list_id members_hash['members'].append({ 'list_fqdn': args.list_fqdn, 'email': member.email, 'display_name': member.user.display_name }) #held_data[held.request_id] = held.rest_data #members_hash['preferences']= member.preferences #print "S###########################" #print json.dumps(member.rest_data, indent=2) #print json.dumps(member.user.rest_data, indent=2) #print json.dumps(members_hash, indent=2) #print "E###########################" #print("debug"+str(member)) print json.dumps(members_hash, indent=2) # end print_fqdn_memberss def restore_members( input_file ): 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 member in data['members']: #print(str(member)) print('list_fqdn:'+ member['list_fqdn']) print('display_name'+ member['display_name']) print('email'+ member['email']) #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 args = parser.parse_args() # 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: print_fqdn_members(client,ml_fqdn) # Get all the members elif ml_fqdn.upper() == 'ALL': print_all_members(client) else: sys.exit('Error: Email list"'+ml_fqdn+'" does not exist in domain '+args.core_uri + "\nSee List\n"+get_ml_fqdns(ml_fqdns)) #end if elif args.restore: #Open user list dump file #print "restoring file." restore_members( args.restore)