1 #!/usr/bin/env python 2 3 """ 4 Add users to a MoinMoin wiki, fetching the profile of each user from a 5 Confluence site in order to obtain name and e-mail details. 6 7 User details are written to standard output in a tab-separated sequence using 8 the following format: 9 10 USERNAME FULLNAME EMAIL IMAGE-URL PASSWORD 11 """ 12 13 from time import sleep 14 from os.path import split 15 from subprocess import call 16 import random, string 17 import sys 18 19 this_dir = split(sys.argv[0])[0] 20 sys.path.append(this_dir) 21 22 from get_profile import get_profile 23 24 def randompass(): 25 return "".join(random.sample(string.ascii_letters, 10)) 26 27 def add_user(wiki, username, fullname, email, password): 28 cmd = ["moin", "--config-dir=%s" % wiki, "account", "create", 29 "--name=%s" % username, 30 "--email=%s" % email, 31 "--password=%s" % password] + \ 32 (fullname and ["--alias=%s" % fullname] or []) 33 call(cmd) 34 35 def main(): 36 progname = split(sys.argv[0])[-1] 37 38 try: 39 wiki = sys.argv[1] 40 url = sys.argv[2] 41 delay = int((sys.argv[3:4] or ["1"])[0]) 42 except (IndexError, ValueError): 43 print >>sys.stderr, "%s <wiki configuration directory> <wiki URL> [ <retrieval delay> ]" % progname 44 print >>sys.stderr 45 print >>sys.stderr, "Example: %s wiki http://wiki.list.org/" % progname 46 sys.exit(1) 47 48 line = sys.stdin.readline() 49 while line: 50 username = line.strip() 51 username, fullname, email, image = get_profile(url, username) 52 password = randompass() 53 add_user(wiki, username, fullname, email, password) 54 print "\t".join([username, fullname, email, image, password]) 55 56 sleep(delay) 57 line = sys.stdin.readline() 58 59 if __name__ == "__main__": 60 main() 61 62 # vim: tabstop=4 expandtab shiftwidth=4