Beispiel #1
0
 def testJIDchange(self):
     """Test changing JID of the form 'user@server/resource/with/slashes'"""
     j = JID('user1@someserver1/some1/resource1')
     j.user = '******'
     j.domain = 'someserver'
     j.resource = 'some/resource'
     self.check_jid(j, 'user', 'someserver', 'some/resource',
                    'user@someserver', 'user@someserver/some/resource',
                    'user@someserver/some/resource')
Beispiel #2
0
 def testJIDchange(self):
     """Test changing JID of the form 'user@server/resource/with/slashes'"""
     j = JID('user1@someserver1/some1/resource1')
     j.user = '******'
     j.domain = 'someserver'
     j.resource = 'some/resource'
     self.check_jid(j,
                    'user',
                    'someserver',
                    'some/resource',
                    'user@someserver',
                    'user@someserver/some/resource',
                    'user@someserver/some/resource')
Beispiel #3
0
 async def _set_roster(self, iq):
     try:
         self.delay_pushes += 1
         items = {}
         try:
             contacts = iq['roster'].get_items()
             if len(contacts) != 1:
                 raise XMPPError('bad-request')
             for jid, values in contacts.items():
                 if jid.bare == self.stream.boundjid.bare:
                     raise XMPPError('not-allowed')
                 if values.get('subscription', 'none') != 'remove':
                     if jid.user == '':
                         # the request might be addressed to a nickname;
                         # I haven't found any reference for that actually
                         # being allowed, so for now, treat that as a
                         # query for a username on the local server
                         # (while also telling the client to remove the
                         # original request, just in case).
                         items[jid] = {'subscription': 'remove'}
                         jid = JID(jid)
                         jid.user = jid.domain
                         jid.domain = self.stream.host
                     items[jid] = await self._update_contact(jid, values)
                 else:
                     items[jid] = await self._remove_contact(jid)
         except Exception as e:
             iq.exception(e)
             return
         iq.reply().send()
         # push to other resources of the same user
         del iq['from']
         iq['roster'].set_items(items)
         await self.stream.ipc_send('roster.push', self.stream.boundjid,
                                    iq.xml)
     finally:
         self.delay_pushes -= 1
         if self.delay_pushes == 0:
             pushes = self.delayed_pushes
             self.delayed_pushes = []
             for xml, checked in pushes:
                 await self._relay_push(xml, checked)