Jabber User Controls script

Download, Add a comment, Back to main page
# manages jabber users
# by Dennis Bond

import shelve
LOCALDIR = "/this/script's/local/directory/"
SPOOLDIR = "/your/spool/directory/"
HOSTNAME = "jabber.yourdomain.com"

# checks if a file exists
def exists(filename):
    try:
        file = open(filename)
        file.close()
        return True
    except:
        return False

# lists users
def list_users():
	openfile = shelve.open(LOCALDIR + "users.dat","r")
	
	keylist = openfile.keys()
	keylist.sort()
	
	for key in keylist:
		print key, "-", openfile[key][0], openfile[key][1], openfile[key][2], "(password)"
	openfile.close()
	
#adds user
def add_user():
	openfile = shelve.open(LOCALDIR + "users.dat")
	confirm = ""

	username = raw_input("Enter new user's username (ie jdoe):\n")
	wholename = raw_input("Enter new user's first and last name (ie John Doe) \n")
	groupname = raw_input("Enter new user's group name (ie Work) \n")
	password = raw_input("Enter new user's password (ie password):\n")
	
	while (confirm.lower() != "yes") and (confirm.lower() != "no"):
		confirm = raw_input("Add " + username + " " + wholename + " " + groupname + " " + password + " to Jabber? (yes/no): \n")
	
	if username in openfile.keys():
		print "\nUsername already exists!  User Not Added."
	elif confirm.lower() == "yes":
		openfile[username] = [username,wholename,groupname,password]
		print "\n" + username + " added!"
	else:
		print "\nUser Not Added."

	openfile.close()

# views user password
def view_password():
	openfile = shelve.open(LOCALDIR + "users.dat","r")
	
	show_who = None
	show_who = raw_input("Enter username to see password: \n")
	print
	
	if show_who in openfile.keys():
		print show_who + "'s password is '" + openfile[show_who][3] + "'"
	else:
		print "User Not Found."
		
	openfile.close()
	
# changes user password
def change_password():
	openfile = shelve.open(LOCALDIR + "users.dat")
	confirm = ""
	
	new_password = "password"
	change_who = None
	change_who = raw_input("Enter username to change password: \n")
	print
	
	if change_who in openfile.keys():
		new_password = raw_input("Enter new password: \n")
		print
		
		while (confirm.lower() != "yes") and (confirm.lower() != "no"):
			confirm = raw_input("Change " + change_who + "'s password to '" + new_password + "' ? (yes/no): \n")
		if confirm.lower() == "yes":
			temp = openfile[change_who]
			temp[3] = new_password
			openfile[change_who] = temp
			print "\nPassword Changed!"
		else:
			print "\nPassword NOT Changed."
	else:
		print "User Not Found!"
		
	openfile.close()
	
# deletes user
def delete_user():
	openfile = shelve.open(LOCALDIR + "users.dat")
	confirm = ""
	
	delete_who = None
	delete_who = raw_input("Enter username to delete: \n")
	print
	
	if delete_who in openfile.keys():
		while (confirm.lower() != "yes") and (confirm.lower() != "no"):
			confirm = raw_input("Delete " + delete_who + " from Jabber? (yes/no): \n")
		
		if confirm.lower() == "yes":
			del openfile[delete_who]
			print "\nUser " + delete_who + " deleted!"
		else:
			print "\nUser Not Deleted."
	else:
		print "User Not Found!"
	openfile.close()

# backs up user data file
def backup_file():
	backup_file = None
	backup_file = raw_input("Enter filename for backup (ie users2.dat): \n")
	print
	
	if backup_file == "users.dat":
		print "Cannot Overwrite Primany User Directory!!"
	elif not backup_file:
		print "Invalid Filename!"
	else:
		openfile = shelve.open(LOCALDIR + "users.dat","r")
		backup = shelve.open(LOCALDIR + backup_file,"n")
		for key in openfile.keys():
			backup[key] = openfile[key]
		backup.close()
		openfile.close()
		print "Backup Created!"

# restores user data file
def restore_backup():
	backup_file = None
	backup_file = raw_input("Enter filename to restore from (ie users2.dat): \n")
	print
	confirm = ""
	
	if backup_file == "users.dat":
		print "Cannot Restore From Primany User Directory!!"
	elif exists(backup_file) is False:
		print "Invalid Filename!"
	else:
		while (confirm.lower() != "yes") and (confirm.lower() != "no"):
			confirm = raw_input("Restore from " + backup_file + " now? (yes/no): \n")
		
		if confirm.lower() == "yes":
			openfile = shelve.open(LOCALDIR + backup_file)
			backup = shelve.open(LOCALDIR + "users.dat","n")
			for key in openfile.keys():
				backup[key] = openfile[key]
			backup.close()
			openfile.close()
			print "\nBackup Restored!"
		else:
			print "\nRestore Operation Aborted!"

# create rosters
def create_rosters():
	print "Creating Rosters..."
	
	openfile = shelve.open(LOCALDIR + "users.dat","r")
	rosterfile = open(SPOOLDIR + "roster.xml","w")
	
	rosterfile.write("<query xmlns='jabber:iq:roster' xdbns='jabber:iq:roster'>")
	
	keylist = openfile.keys()
	keylist.sort()
	for key in keylist:
		rosterfile.write("<item jid='" + openfile[key][0] + "@" + HOSTNAME + "' name='" + openfile[key][1] + "' subscription='both'><group>" + openfile[key][2] + "</group></item>")
	
	rosterfile.write("</query>")
	
	rosterfile.close()
	openfile.close()
	
	print "Roster File Created..."
	
	openfile = shelve.open(LOCALDIR + "users.dat","r")
	
	keylist = openfile.keys()
	keylist.sort()
	for key in keylist:
		rosterfile = open(SPOOLDIR + key + ".xml","w")
		rosterfile.write("<xdb><password xmlns='jabber:iq:auth' xdbns='jabber:iq:auth'>" + openfile[key][3] + "</password><query xmlns='jabber:iq:register' xdbns='jabber:iq:register'><username>" + openfile[key][0] + "</username><password xmlns='jabber:iq:auth'>" + openfile[key][3] + "</password></query><query xmlns='jabber:iq:roster' xdbns='jabber:iq:roster'>")
	
		for key in keylist:
			rosterfile.write("<item jid='" + openfile[key][0] + "@" + HOSTNAME + "' name='" + openfile[key][1] + "' subscription='both'><group>" + openfile[key][2] + "</group></item>")
	
		rosterfile.write("</query></xdb>")
		rosterfile.close()
	
	openfile.close()
	
	print "User Rosters Created."

menu_option = None
while menu_option != "0":
	
	print \
	"""
	Jabber User Controls
	0 - Quit
	1 - List Users
	2 - Add User
	3 - View User Password
	4 - Change User Password
	5 - Delete User
	6 - Backup User File
	7 - Restore Backup File
	8 - Create Jabber Rosters
	"""
	
	menu_option = raw_input("Choice: ")
	print
	
	if menu_option == "0":
		print "Exiting User Controls.\n"
	elif menu_option == "1":
		list_users()
	elif menu_option == "2":
		add_user()
	elif menu_option == "3":
		view_password()
	elif menu_option == "4":
		change_password()
	elif menu_option == "5":
		delete_user()
	elif menu_option == "6":
		backup_file()
	elif menu_option == "7":
		restore_backup()
	elif menu_option == "8":
		create_rosters()
	else:
		print menu_option + " is not a valid choice!"