mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-09 12:30:15 +02:00
Openfire group names fix (#859)
* Force lowercase group names * Fix comparison of group names * Sanitise group name for broadcast message
This commit is contained in:
parent
c2f12eed26
commit
3f454743a9
@ -61,7 +61,7 @@ class OpenfireManager:
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _sanitize_groupname(name):
|
def _sanitize_groupname(name):
|
||||||
name = name.strip(' _')
|
name = name.strip(' _').lower()
|
||||||
return re.sub('[^\w.-]', '', name)
|
return re.sub('[^\w.-]', '', name)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@ -120,9 +120,10 @@ class OpenfireManager:
|
|||||||
logger.error("Unable to update openfire user %s password - user not found on server." % username)
|
logger.error("Unable to update openfire user %s password - user not found on server." % username)
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
@staticmethod
|
@classmethod
|
||||||
def update_user_groups(username, groups):
|
def update_user_groups(cls, username, groups):
|
||||||
logger.debug("Updating openfire user %s groups %s" % (username, groups))
|
logger.debug("Updating openfire user %s groups %s" % (username, groups))
|
||||||
|
s_groups = list(map(cls._sanitize_groupname, groups)) # Sanitized group names
|
||||||
api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY)
|
api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY)
|
||||||
response = api.get_user_groups(username)
|
response = api.get_user_groups(username)
|
||||||
remote_groups = []
|
remote_groups = []
|
||||||
@ -130,16 +131,15 @@ class OpenfireManager:
|
|||||||
remote_groups = response['groupname']
|
remote_groups = response['groupname']
|
||||||
if isinstance(remote_groups, six.string_types):
|
if isinstance(remote_groups, six.string_types):
|
||||||
remote_groups = [remote_groups]
|
remote_groups = [remote_groups]
|
||||||
|
remote_groups = list(map(cls._sanitize_groupname, remote_groups))
|
||||||
logger.debug("Openfire user %s has groups %s" % (username, remote_groups))
|
logger.debug("Openfire user %s has groups %s" % (username, remote_groups))
|
||||||
add_groups = []
|
add_groups = []
|
||||||
del_groups = []
|
del_groups = []
|
||||||
for g in groups:
|
for g in s_groups:
|
||||||
g = OpenfireManager._sanitize_groupname(g)
|
|
||||||
if g not in remote_groups:
|
if g not in remote_groups:
|
||||||
add_groups.append(g)
|
add_groups.append(g)
|
||||||
for g in remote_groups:
|
for g in remote_groups:
|
||||||
g = OpenfireManager._sanitize_groupname(g)
|
if g not in s_groups:
|
||||||
if g not in groups:
|
|
||||||
del_groups.append(g)
|
del_groups.append(g)
|
||||||
logger.info(
|
logger.info(
|
||||||
"Updating openfire groups for user %s - adding %s, removing %s" % (username, add_groups, del_groups))
|
"Updating openfire groups for user %s - adding %s, removing %s" % (username, add_groups, del_groups))
|
||||||
@ -155,10 +155,11 @@ class OpenfireManager:
|
|||||||
api.delete_user_groups(username, groups)
|
api.delete_user_groups(username, groups)
|
||||||
logger.info("Deleted groups %s from openfire user %s" % (groups, username))
|
logger.info("Deleted groups %s from openfire user %s" % (groups, username))
|
||||||
|
|
||||||
@staticmethod
|
@classmethod
|
||||||
def send_broadcast_message(group_name, broadcast_message):
|
def send_broadcast_message(cls, group_name, broadcast_message):
|
||||||
logger.debug("Sending jabber ping to group %s with message %s" % (group_name, broadcast_message))
|
s_group_name = cls._sanitize_groupname(group_name)
|
||||||
to_address = group_name + '@' + settings.BROADCAST_SERVICE_NAME + '.' + settings.JABBER_URL
|
logger.debug("Sending jabber ping to group %s with message %s" % (s_group_name, broadcast_message))
|
||||||
|
to_address = s_group_name + '@' + settings.BROADCAST_SERVICE_NAME + '.' + settings.JABBER_URL
|
||||||
xmpp = PingBot(settings.BROADCAST_USER, settings.BROADCAST_USER_PASSWORD, to_address, broadcast_message)
|
xmpp = PingBot(settings.BROADCAST_USER, settings.BROADCAST_USER_PASSWORD, to_address, broadcast_message)
|
||||||
xmpp.register_plugin('xep_0030') # Service Discovery
|
xmpp.register_plugin('xep_0030') # Service Discovery
|
||||||
xmpp.register_plugin('xep_0199') # XMPP Ping
|
xmpp.register_plugin('xep_0199') # XMPP Ping
|
||||||
|
@ -219,3 +219,28 @@ class OpenfireManagerTestCase(TestCase):
|
|||||||
result_username = self.manager._OpenfireManager__sanitize_username(test_username)
|
result_username = self.manager._OpenfireManager__sanitize_username(test_username)
|
||||||
|
|
||||||
self.assertEqual(result_username, 'My_Test\\20User\\22\\27\\26\\2f\\3a\\3c\\3e\\40name\\5c20name')
|
self.assertEqual(result_username, 'My_Test\\20User\\22\\27\\26\\2f\\3a\\3c\\3e\\40name\\5c20name')
|
||||||
|
|
||||||
|
def test__sanitize_groupname(self):
|
||||||
|
test_groupname = " My_Test Groupname"
|
||||||
|
|
||||||
|
result_groupname = self.manager._sanitize_groupname(test_groupname)
|
||||||
|
|
||||||
|
self.assertEqual(result_groupname, "my_testgroupname")
|
||||||
|
|
||||||
|
@mock.patch(MODULE_PATH + '.manager.ofUsers')
|
||||||
|
def test_update_user_groups(self, api):
|
||||||
|
groups = ["AddGroup", "othergroup", "Guest Group"]
|
||||||
|
server_groups = ["othergroup", "Guest Group", "REMOVE group"]
|
||||||
|
username = "testuser"
|
||||||
|
api_instance = api.return_value
|
||||||
|
api_instance.get_user_groups.return_value = {'groupname': server_groups}
|
||||||
|
|
||||||
|
self.manager.update_user_groups(username, groups)
|
||||||
|
|
||||||
|
self.assertTrue(api_instance.add_user_groups.called)
|
||||||
|
args, kwargs = api_instance.add_user_groups.call_args
|
||||||
|
self.assertEqual(args[1], ["addgroup"])
|
||||||
|
|
||||||
|
self.assertTrue(api_instance.delete_user_groups.called)
|
||||||
|
args, kwargs = api_instance.delete_user_groups.call_args
|
||||||
|
self.assertEqual(args[1], ["removegroup"])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user