comparison sat_pubsub/privilege.py @ 414:ccb2a22ea0fc

Python 3 port: /!\ Python 3.6+ is now needed to use SàT Pubsub /!\ instability may occur and features may not be working anymore, this will improve with time The same procedure as in backend has been applied (check backend commit ab2696e34d29 logs for details). Python minimal version has been updated in setup.py
author Goffi <goffi@goffi.org>
date Fri, 16 Aug 2019 12:53:33 +0200
parents c56a728412f1
children 96342e7e9f5d
comparison
equal deleted inserted replaced
413:a5edf5e1dd74 414:ccb2a22ea0fc
1 #!/usr/bin/python 1 #!/usr/bin/env python3
2 #-*- coding: utf-8 -*- 2 #-*- coding: utf-8 -*-
3 # 3 #
4 # Copyright (c) 2015 Jérôme Poisson 4 # Copyright (c) 2015 Jérôme Poisson
5 5
6 6
90 def onAdvertise(self, message): 90 def onAdvertise(self, message):
91 """Managage the <message/> advertising privileges 91 """Managage the <message/> advertising privileges
92 92
93 self._permissions will be updated according to advertised privileged 93 self._permissions will be updated according to advertised privileged
94 """ 94 """
95 privilege_elt = message.elements(PRIV_ENT_NS, 'privilege').next() 95 privilege_elt = next(message.elements(PRIV_ENT_NS, 'privilege'))
96 for perm_elt in privilege_elt.elements(PRIV_ENT_NS): 96 for perm_elt in privilege_elt.elements(PRIV_ENT_NS):
97 try: 97 try:
98 if perm_elt.name != 'perm': 98 if perm_elt.name != 'perm':
99 raise InvalidStanza(u'unexpected element {}'.format(perm_elt.name)) 99 raise InvalidStanza('unexpected element {}'.format(perm_elt.name))
100 perm_access = perm_elt['access'] 100 perm_access = perm_elt['access']
101 perm_type = perm_elt['type'] 101 perm_type = perm_elt['type']
102 try: 102 try:
103 if perm_type not in TO_CHECK[perm_access]: 103 if perm_type not in TO_CHECK[perm_access]:
104 raise InvalidStanza(u'bad type [{}] for permission {}'.format(perm_type, perm_access)) 104 raise InvalidStanza('bad type [{}] for permission {}'.format(perm_type, perm_access))
105 except KeyError: 105 except KeyError:
106 raise InvalidStanza(u'bad permission [{}]'.format(perm_access)) 106 raise InvalidStanza('bad permission [{}]'.format(perm_access))
107 except InvalidStanza as e: 107 except InvalidStanza as e:
108 log.msg("Invalid stanza received ({}), setting permission to none".format(e)) 108 log.msg("Invalid stanza received ({}), setting permission to none".format(e))
109 for perm in self._permissions: 109 for perm in self._permissions:
110 self._permissions[perm] = 'none' 110 self._permissions[perm] = 'none'
111 break 111 break
236 roster = yield self.getRoster(from_jid_bare) 236 roster = yield self.getRoster(from_jid_bare)
237 timestamp = time.time() 237 timestamp = time.time()
238 self.roster_cache[from_jid_bare] = {'timestamp': timestamp, 238 self.roster_cache[from_jid_bare] = {'timestamp': timestamp,
239 'roster': roster, 239 'roster': roster,
240 } 240 }
241 for roster_jid, roster_item in roster.iteritems(): 241 for roster_jid, roster_item in roster.items():
242 if roster_item.subscriptionFrom: 242 if roster_item.subscriptionFrom:
243 self.presence_map.setdefault(roster_jid, set()).add(from_jid_bare) 243 self.presence_map.setdefault(roster_jid, set()).add(from_jid_bare)
244 244
245 presence_type = presence_elt.getAttribute('type') 245 presence_type = presence_elt.getAttribute('type')
246 if presence_type != "unavailable": 246 if presence_type != "unavailable":
294 @param explicit_subscribers(set(jid.JID}: jids of people which have an explicit subscription 294 @param explicit_subscribers(set(jid.JID}: jids of people which have an explicit subscription
295 @return (list[jid.JID]): full jid of automatically subscribed entities 295 @return (list[jid.JID]): full jid of automatically subscribed entities
296 """ 296 """
297 auto_subscribers = [] 297 auto_subscribers = []
298 roster = yield self.getRoster(recipient) 298 roster = yield self.getRoster(recipient)
299 for roster_jid, roster_item in roster.iteritems(): 299 for roster_jid, roster_item in roster.items():
300 if roster_jid in explicit_subscribers: 300 if roster_jid in explicit_subscribers:
301 continue 301 continue
302 if roster_item.subscriptionFrom: 302 if roster_item.subscriptionFrom:
303 try: 303 try:
304 online_resources = self.caps_map[roster_jid] 304 online_resources = self.caps_map[roster_jid]
305 except KeyError: 305 except KeyError:
306 continue 306 continue
307 for res, disco_tuple in online_resources.iteritems(): 307 for res, disco_tuple in online_resources.items():
308 notify = self.hash_map[disco_tuple]['notify'] 308 notify = self.hash_map[disco_tuple]['notify']
309 if nodeIdentifier in notify: 309 if nodeIdentifier in notify:
310 full_jid = jid.JID(tuple=(roster_jid.user, roster_jid.host, res)) 310 full_jid = jid.JID(tuple=(roster_jid.user, roster_jid.host, res))
311 auto_subscribers.append(full_jid) 311 auto_subscribers.append(full_jid)
312 defer.returnValue(auto_subscribers) 312 defer.returnValue(auto_subscribers)