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!"