From ce8799cfafa5fa37250b6a07190d23173c8f2df2 Mon Sep 17 00:00:00 2001 From: Andrew Williams Date: Fri, 4 Jun 2010 10:27:21 +0100 Subject: [PATCH] Jabber Service module now adds people to group rosters when added --- sso/services/jabber/__init__.py | 36 ++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/sso/services/jabber/__init__.py b/sso/services/jabber/__init__.py index 2e1eac7..302df7f 100644 --- a/sso/services/jabber/__init__.py +++ b/sso/services/jabber/__init__.py @@ -27,13 +27,20 @@ class JabberService(BaseService): if 'character' in kwargs: self.exec_xmlrpc('set_nickname', user=username, host=self.settings['jabber_server'], nickname=kwargs['character'].name) self.exec_xmlrpc('set_vcard2', user=username, host=self.settings['jabber_server'], name='ORG', subname='ORGNAME', content=kwargs['character'].corporation.name) - return "%s@%s" % (username, self.settings['jabber_server']) + uid = "%s@%s" % (username, self.settings['jabber_server']) + if 'user' in kwargs: + self.update_groups(uid, kwargs['user'].groups.all()) + return uid else: return False def delete_user(self, uid): """ Delete a user """ username, server = uid.split("@") + + for group in self.get_group_list(uid): + self.exec_xmlrpc('srg_user_del', user=username, host=server, group=group, grouphost=server) + res = self.exec_xmlrpc('unregister', user=username, host=server) if res['res'] == 0: return True @@ -70,4 +77,31 @@ class JabberService(BaseService): else: return False + def get_group_list(self, uid): + grouplist = [] + username, server = uid.split("@") + srvgrp = self.exec_xmlrpc('srg_list', host=server) + for grp in srvgrp['groups']: + members = self.exec_xmlrpc('srg_list', group=grp['id'], host=server) + members = map(lambda x: x['member'], members['members']) + if uid in members: + grouplist.append(grp['id']) + + return grouplist + + def update_groups(self, uid, groups): + username, server = uid.split("@") + + current_groups = self.get_group_list(uid) + valid_groups = [] + + for group in groups: + groupname = group.name.lower().replace(' ', '-') + self.exec_xmlrpc('srg_create', group=groupname, host=server, name=group.name, description='', display='all') + self.exec_xmlrpc('srg_user_add', user=username, host=server, group=groupname, grouphost=server) + valid_groups.append(groupname) + + for group in (set(current_groups) - set(valid_groups)): + self.exec_xmlrpc('srg_user_del', user=username, host=server, group=groupname, grouphost=server) + ServiceClass = 'JabberService'