Guest User

openfire_manager.py

a guest
Oct 31st, 2015
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.60 KB | None | 0 0
  1. import os
  2. from urlparse import urlparse
  3.  
  4. import xmpp
  5. from django.contrib.auth.models import User
  6. from django.contrib.auth.models import Group
  7. from django.conf import settings
  8. from openfire import exception
  9. from openfire import UserService
  10.  
  11. from authentication.managers import AuthServicesInfoManager
  12.  
  13. import threading
  14.  
  15. import requests
  16. import json
  17.  
  18. class OpenfireManager:
  19.     def __init__(self):
  20.         pass
  21.  
  22.     @staticmethod
  23.     def send_broadcast_threaded(group_name, broadcast_message):
  24.         broadcast_thread = XmppThread(1, "XMPP Broadcast Thread", 1, group_name, broadcast_message)
  25.         broadcast_thread.start()
  26.  
  27.     @staticmethod
  28.     def __add_address_to_username(username):
  29.         address = urlparse(settings.OPENFIRE_ADDRESS).netloc.split(":")[0]
  30.         completed_username = username + "@" + address
  31.         return completed_username
  32.  
  33.     @staticmethod
  34.     def __santatize_username(username):
  35.         sanatized = username.replace(" ", "_")
  36.         sanatized = sanatized.replace("'", "")
  37.         return sanatized.lower()
  38.  
  39.     @staticmethod
  40.     def __generate_random_pass():
  41.         return os.urandom(8).encode('hex')
  42.  
  43.     @staticmethod
  44.     def add_user(username):
  45.  
  46.         try:
  47.             sanatized_username = OpenfireManager.__santatize_username(username)
  48.             random_password = OpenfireManager.__generate_random_pass()
  49.          
  50.             openfire_path = settings.OPENFIRE_ADDRESS + "plugins/restapi/v1/users"
  51.          
  52.             user_details = {"username":sanatized_username, "password":random_password}                        
  53.             custom_headers = {'authorization':settings.OPENFIRE_SECRET_KEY, 'content-type':'application/json'}          
  54.             r = requests.post(openfire_path, headers=custom_headers, data=json.dumps(user_details))
  55.          
  56.             r.raise_for_status()
  57.          
  58.         except:
  59.             # failed for some reason
  60.             return "", ""
  61.  
  62.         return sanatized_username, random_password
  63.  
  64.     @staticmethod
  65.     def delete_user(username):
  66.         try:
  67.             openfire_path = settings.OPENFIRE_ADDRESS + "plugins/restapi/v1/users/" + username
  68.             custom_headers = {'authorization': settings.OPENFIRE_SECRET_KEY}
  69.             r = requests.delete(openfire_path, headers=custom_headers)
  70.  
  71.             r.raise_for_status()
  72.  
  73.             return True
  74.         except:
  75.             return False
  76.  
  77.     @staticmethod
  78.     def lock_user(username):
  79.         custom_headers = {'authorization': settings.OPENFIRE_SECRET_KEY}
  80.         openfire_path = settings.OPENFIRE_ADDRESS + "plugins/restapi/v1/lockouts/" + username
  81.         r = requests.post(openfire_path, headers=custom_headers)
  82.  
  83.     @staticmethod
  84.     def unlock_user(username):
  85.         custom_headers = {'authorization': settings.OPENFIRE_SECRET_KEY}
  86.         openfire_path = settings.OPENFIRE_ADDRESS + "plugins/restapi/v1/lockouts/" + username
  87.         r = requests.delete(openfire_path, headers=custom_headers)
  88.  
  89.     @staticmethod
  90.     def update_user_pass(username):
  91.         try:
  92.             random_password = OpenfireManager.__generate_random_pass()
  93.  
  94.             custom_headers = {'authorization': settings.OPENFIRE_SECRET_KEY, 'content-type':'application/json'}
  95.             openfire_path = settings.OPENFIRE_ADDRESS + "plugins/restapi/v1/users/" + username
  96.             user_details = {"username": sanatized_username, "password": random_password}
  97.  
  98.             r = requests.put(openfire_path, headers=custom_headers, data=json.dumps(user_details))
  99.  
  100.             r.raise_for_status()
  101.  
  102.             return random_password
  103.         except:
  104.             return ""
  105.  
  106.     @staticmethod
  107.     def update_user_groups(username, password, groups):
  108.         openfire_path = settings.OPENFIRE_ADDRESS + "plugins/restapi/v1/users/" + username + "/groups"
  109.         custom_headers = {'authorization': settings.OPENFIRE_SECRET_KEY, 'content-type': 'application/json'}        
  110.  
  111.         group_list = []
  112.  
  113.         for g in groups:
  114.             group_list.append(g)
  115.  
  116.         group_dict = {'groupname': group_list}
  117.  
  118.         r = requests.post(openfire_path, headers=custom_headers, data=json.dumps(group_dict))
  119.  
  120.     @staticmethod
  121.     def delete_user_groups(username, groups):
  122.  
  123.         openfire_path = settings.OPENFIRE_ADDRESS + "plugins/restapi/v1/users/" + username + "/groups"
  124.         custom_headers = {'authorization': settings.OPENFIRE_SECRET_KEY, 'content-type': 'application/json'}        
  125.  
  126.         group_list = []
  127.  
  128.         for g in groups:
  129.             group_list.append(g)
  130.  
  131.         group_dict = {'groupname': group_list}
  132.  
  133.         r = requests.delete(openfire_path, headers=custom_headers, data=json.dumps(group_dict))
  134.  
  135.     @staticmethod
  136.     def send_broadcast_message(group_name, broadcast_message):
  137.         # create to address
  138.         client = xmpp.Client(settings.JABBER_URL)
  139.         client.connect(server=(settings.JABBER_SERVER, settings.JABBER_PORT))
  140.         client.auth(settings.BROADCAST_USER, settings.BROADCAST_USER_PASSWORD, 'broadcast')
  141.  
  142.         if group_name != 'all':
  143.             group = Group.objects.get(name=group_name)
  144.             for user in group.user_set.all():
  145.                 auth_info = AuthServicesInfoManager.get_auth_service_info(user)
  146.                 if auth_info:
  147.                     if auth_info.jabber_username != "":
  148.                         to_address = auth_info.jabber_username + '@' + settings.JABBER_URL
  149.                         message = xmpp.Message(to_address, broadcast_message)
  150.                         message.setAttr('type', 'chat')
  151.                         client.send(message)
  152.                         client.Process(1)
  153.         else:
  154.             for user in User.objects.all():
  155.                 auth_info = AuthServicesInfoManager.get_auth_service_info(user)
  156.                 if auth_info:
  157.                     if auth_info.jabber_username != "":
  158.                         to_address = auth_info.jabber_username + '@' + settings.JABBER_URL
  159.                         message = xmpp.Message(to_address, broadcast_message)
  160.                         message.setAttr('type', 'chat')
  161.                         client.send(message)
  162.                         client.Process(1)
  163.  
  164.         client.disconnect()
  165.  
  166.  
  167. class XmppThread (threading.Thread):
  168.     def __init__(self, threadID, name, counter, group, message,):
  169.         threading.Thread.__init__(self)
  170.         self.threadID = threadID
  171.         self.name = name
  172.         self.counter = counter
  173.         self.group = group
  174.         self.message = message
  175.  
  176.     def run(self):
  177.         print "Starting " + self.name
  178.         OpenfireManager.send_broadcast_message(self.group, self.message)
  179.         print "Exiting " + self.name
Advertisement
Add Comment
Please, Sign In to add comment