From 23c8d48fbe2d824d1ee030d257063cce7c4056f2 Mon Sep 17 00:00:00 2001 From: Adarnof Date: Tue, 22 Dec 2015 22:14:20 +0000 Subject: [PATCH 1/6] Adds REST API support to Openfire using git package per #144 --- requirements.txt | 1 + services/managers/openfire_manager.py | 34 +++++++++++++++++++-------- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/requirements.txt b/requirements.txt index c8b8ddcd..d07c3800 100755 --- a/requirements.txt +++ b/requirements.txt @@ -15,3 +15,4 @@ django-bootstrap-form django-celery git+git://github.com/nikdoof/python-ts3.git +git+git://github.com/seamus-45/openfire-restapi.git diff --git a/services/managers/openfire_manager.py b/services/managers/openfire_manager.py index 29d4fa73..0622f7a2 100755 --- a/services/managers/openfire_manager.py +++ b/services/managers/openfire_manager.py @@ -12,6 +12,8 @@ from authentication.managers import AuthServicesInfoManager import threading +import ofrestapi + class OpenfireManager: def __init__(self): @@ -44,7 +46,7 @@ class OpenfireManager: try: sanatized_username = OpenfireManager.__santatize_username(username) password = OpenfireManager.__generate_random_pass() - api = UserService(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) + api = ofrestapi.users(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) api.add_user(sanatized_username, password) except exception.UserAlreadyExistsException: @@ -56,7 +58,7 @@ class OpenfireManager: @staticmethod def delete_user(username): try: - api = UserService(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) + api = ofrestapi.users(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) api.delete_user(username) return True except exception.UserNotFoundException: @@ -64,20 +66,20 @@ class OpenfireManager: @staticmethod def lock_user(username): - api = UserService(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) + api = ofrestapi.users(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) api.lock_user(username) @staticmethod def unlock_user(username): - api = UserService(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) + api = ofrestapi.users(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) api.unlock_user(username) @staticmethod def update_user_pass(username): try: password = OpenfireManager.__generate_random_pass() - api = UserService(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) - api.update_user(username, password) + api = ofrestapi.users(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) + api.update_user(username, password=password) return password except exception.UserNotFoundException: return "" @@ -85,16 +87,28 @@ class OpenfireManager: @staticmethod def update_user_groups(username, password, groups): try: - api = UserService(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) - api.update_user(username, password, "", "", groups) + api = ofrestapi.users(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) + remote_groups = api.get_user_groups(username) + add_groups = [] + del_groups = [] + for g in groups: + if not g in remote_groups: + add_groups.append(g) + for g in remote_groups: + if not g in groups: + del_groups.append(g) + if add_groups: + api.add_user_groups(username, add_groups) + if del_groups: + api.delete_user_groups(username, del_groups) except exception.HTTPException as e: print e @staticmethod def delete_user_groups(username, groups): - api = UserService(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) - api.delete_group(username, groups) + api = ofrestapi.users(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) + api.delete_user_groups(username, groups) @staticmethod def send_broadcast_message(group_name, broadcast_message): From 9b2934ae7a4efc2744a51f9a62e9006fbbbad8ec Mon Sep 17 00:00:00 2001 From: Adarnof Date: Tue, 22 Dec 2015 22:39:38 +0000 Subject: [PATCH 2/6] Corrected handling of group updates Removed old openfire package from requirements --- requirements.txt | 1 - services/managers/openfire_manager.py | 24 +++++++++--------------- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/requirements.txt b/requirements.txt index d07c3800..f3a24ba3 100755 --- a/requirements.txt +++ b/requirements.txt @@ -5,7 +5,6 @@ evelink dnspython passlib xmpppy==0.5.0rc1 -python-openfire==0.2.3-beta requests # Django Stuff # diff --git a/services/managers/openfire_manager.py b/services/managers/openfire_manager.py index 0622f7a2..012b2803 100755 --- a/services/managers/openfire_manager.py +++ b/services/managers/openfire_manager.py @@ -5,14 +5,8 @@ import xmpp from django.contrib.auth.models import User from django.contrib.auth.models import Group from django.conf import settings -from openfire import exception -from openfire import UserService - -from authentication.managers import AuthServicesInfoManager - import threading - -import ofrestapi +from ofrestapi.users import Users as ofUsers class OpenfireManager: @@ -46,7 +40,7 @@ class OpenfireManager: try: sanatized_username = OpenfireManager.__santatize_username(username) password = OpenfireManager.__generate_random_pass() - api = ofrestapi.users(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) + api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) api.add_user(sanatized_username, password) except exception.UserAlreadyExistsException: @@ -58,7 +52,7 @@ class OpenfireManager: @staticmethod def delete_user(username): try: - api = ofrestapi.users(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) + api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) api.delete_user(username) return True except exception.UserNotFoundException: @@ -66,19 +60,19 @@ class OpenfireManager: @staticmethod def lock_user(username): - api = ofrestapi.users(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) + api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) api.lock_user(username) @staticmethod def unlock_user(username): - api = ofrestapi.users(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) + api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) api.unlock_user(username) @staticmethod def update_user_pass(username): try: password = OpenfireManager.__generate_random_pass() - api = ofrestapi.users(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) + api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) api.update_user(username, password=password) return password except exception.UserNotFoundException: @@ -87,8 +81,8 @@ class OpenfireManager: @staticmethod def update_user_groups(username, password, groups): try: - api = ofrestapi.users(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) - remote_groups = api.get_user_groups(username) + api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) + remote_groups = api.get_user_groups(username)['groupname'] add_groups = [] del_groups = [] for g in groups: @@ -107,7 +101,7 @@ class OpenfireManager: @staticmethod def delete_user_groups(username, groups): - api = ofrestapi.users(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) + api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) api.delete_user_groups(username, groups) @staticmethod From 307d577acf4f6838c9699725d48c22a9474b110a Mon Sep 17 00:00:00 2001 From: Adarnof Date: Tue, 22 Dec 2015 22:42:34 +0000 Subject: [PATCH 3/6] Added exception importing to catch custom exceptions from openfire-restapi package --- services/managers/openfire_manager.py | 1 + 1 file changed, 1 insertion(+) diff --git a/services/managers/openfire_manager.py b/services/managers/openfire_manager.py index 012b2803..614469eb 100755 --- a/services/managers/openfire_manager.py +++ b/services/managers/openfire_manager.py @@ -7,6 +7,7 @@ from django.contrib.auth.models import Group from django.conf import settings import threading from ofrestapi.users import Users as ofUsers +from ofrestapi import exception class OpenfireManager: From 4923862dd6814f56a5f454f946c2279979ca6832 Mon Sep 17 00:00:00 2001 From: Adarnof Date: Tue, 22 Dec 2015 22:44:46 +0000 Subject: [PATCH 4/6] Updated default setting format for openfire address to accomodate openfire-restapi package --- alliance_auth/settings.py.example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/alliance_auth/settings.py.example b/alliance_auth/settings.py.example index dda3f3bc..67535b05 100755 --- a/alliance_auth/settings.py.example +++ b/alliance_auth/settings.py.example @@ -304,7 +304,7 @@ IPBOARD_APIMODULE = 'aa' JABBER_URL = os.environ.get('AA_JABBER_URL', "yourdomain.com") JABBER_PORT = int(os.environ.get('AA_JABBER_PORT', '5223')) JABBER_SERVER = os.environ.get('AA_JABBER_SERVER', "yourdomain.com") -OPENFIRE_ADDRESS = os.environ.get('AA_OPENFIRE_ADDRESS', "http://yourdomain.com:9090/") +OPENFIRE_ADDRESS = os.environ.get('AA_OPENFIRE_ADDRESS', "http://yourdomain.com:9090") OPENFIRE_SECRET_KEY = os.environ.get('AA_OPENFIRE_SECRET_KEY', "somekey") BROADCAST_USER = os.environ.get('AA_BROADCAST_USER', "broadcast@") + JABBER_URL BROADCAST_USER_PASSWORD = os.environ.get('AA_BROADCAST_USER_PASSWORD', "somepassword") From 0c4cda95d9dcf6137ee8f1c86798a7acd3e50fda Mon Sep 17 00:00:00 2001 From: Adarnof Date: Tue, 22 Dec 2015 23:03:41 +0000 Subject: [PATCH 5/6] Added handling of empty group lists --- services/managers/openfire_manager.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/services/managers/openfire_manager.py b/services/managers/openfire_manager.py index 614469eb..dae56432 100755 --- a/services/managers/openfire_manager.py +++ b/services/managers/openfire_manager.py @@ -83,7 +83,10 @@ class OpenfireManager: def update_user_groups(username, password, groups): try: api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) - remote_groups = api.get_user_groups(username)['groupname'] + response = api.get_user_groups(username) + remote_groups = [] + if response: + remote_groups = response['groupname'] add_groups = [] del_groups = [] for g in groups: @@ -96,7 +99,7 @@ class OpenfireManager: api.add_user_groups(username, add_groups) if del_groups: api.delete_user_groups(username, del_groups) - except exception.HTTPException as e: + except e: print e @staticmethod From 5d9a3b6b439e520e7d5eec09464a1cd5f3e48697 Mon Sep 17 00:00:00 2001 From: Adarnof Date: Wed, 23 Dec 2015 01:26:30 +0000 Subject: [PATCH 6/6] Removed unused exception handling from group update --- services/managers/openfire_manager.py | 39 +++++++++++++-------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/services/managers/openfire_manager.py b/services/managers/openfire_manager.py index dae56432..aea8bdf2 100755 --- a/services/managers/openfire_manager.py +++ b/services/managers/openfire_manager.py @@ -81,27 +81,24 @@ class OpenfireManager: @staticmethod def update_user_groups(username, password, groups): - try: - api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) - response = api.get_user_groups(username) - remote_groups = [] - if response: - remote_groups = response['groupname'] - add_groups = [] - del_groups = [] - for g in groups: - if not g in remote_groups: - add_groups.append(g) - for g in remote_groups: - if not g in groups: - del_groups.append(g) - if add_groups: - api.add_user_groups(username, add_groups) - if del_groups: - api.delete_user_groups(username, del_groups) - except e: - print e - + api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) + response = api.get_user_groups(username) + remote_groups = [] + if response: + remote_groups = response['groupname'] + add_groups = [] + del_groups = [] + for g in groups: + if not g in remote_groups: + add_groups.append(g) + for g in remote_groups: + if not g in groups: + del_groups.append(g) + if add_groups: + api.add_user_groups(username, add_groups) + if del_groups: + api.delete_user_groups(username, del_groups) + @staticmethod def delete_user_groups(username, groups):