Mercurial > libervia-pubsub
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) |