111 lines
3.8 KiB
Python
111 lines
3.8 KiB
Python
|
"""
|
||
|
SleekXMPP: The Sleek XMPP Library
|
||
|
Copyright (C) 2011 Nathanael C. Fritz, Lance J.T. Stout
|
||
|
This file is part of SleekXMPP.
|
||
|
|
||
|
See the file LICENSE for copying permission.
|
||
|
"""
|
||
|
|
||
|
from sleekxmpp import Iq
|
||
|
from sleekxmpp.xmlstream import register_stanza_plugin
|
||
|
from sleekxmpp.plugins import BasePlugin
|
||
|
from sleekxmpp.plugins.xep_0016 import stanza
|
||
|
from sleekxmpp.plugins.xep_0016.stanza import Privacy, Item
|
||
|
|
||
|
|
||
|
class XEP_0016(BasePlugin):
|
||
|
|
||
|
name = 'xep_0016'
|
||
|
description = 'XEP-0016: Privacy Lists'
|
||
|
dependencies = set(['xep_0030'])
|
||
|
stanza = stanza
|
||
|
|
||
|
def plugin_init(self):
|
||
|
register_stanza_plugin(Iq, Privacy)
|
||
|
|
||
|
def plugin_end(self):
|
||
|
self.xmpp['xep_0030'].del_feature(feature=Privacy.namespace)
|
||
|
|
||
|
def session_bind(self, jid):
|
||
|
self.xmpp['xep_0030'].add_feature(Privacy.namespace)
|
||
|
|
||
|
def get_privacy_lists(self, block=True, timeout=None, callback=None):
|
||
|
iq = self.xmpp.Iq()
|
||
|
iq['type'] = 'get'
|
||
|
iq.enable('privacy')
|
||
|
return iq.send(block=block, timeout=timeout, callback=callback)
|
||
|
|
||
|
def get_list(self, name, block=True, timeout=None, callback=None):
|
||
|
iq = self.xmpp.Iq()
|
||
|
iq['type'] = 'get'
|
||
|
iq['privacy']['list']['name'] = name
|
||
|
return iq.send(block=block, timeout=timeout, callback=callback)
|
||
|
|
||
|
def get_active(self, block=True, timeout=None, callback=None):
|
||
|
iq = self.xmpp.Iq()
|
||
|
iq['type'] = 'get'
|
||
|
iq['privacy'].enable('active')
|
||
|
return iq.send(block=block, timeout=timeout, callback=callback)
|
||
|
|
||
|
def get_default(self, block=True, timeout=None, callback=None):
|
||
|
iq = self.xmpp.Iq()
|
||
|
iq['type'] = 'get'
|
||
|
iq['privacy'].enable('default')
|
||
|
return iq.send(block=block, timeout=timeout, callback=callback)
|
||
|
|
||
|
def activate(self, name, block=True, timeout=None, callback=None):
|
||
|
iq = self.xmpp.Iq()
|
||
|
iq['type'] = 'set'
|
||
|
iq['privacy']['active']['name'] = name
|
||
|
return iq.send(block=block, timeout=timeout, callback=callback)
|
||
|
|
||
|
def deactivate(self, block=True, timeout=None, callback=None):
|
||
|
iq = self.xmpp.Iq()
|
||
|
iq['type'] = 'set'
|
||
|
iq['privacy'].enable('active')
|
||
|
return iq.send(block=block, timeout=timeout, callback=callback)
|
||
|
|
||
|
def make_default(self, name, block=True, timeout=None, callback=None):
|
||
|
iq = self.xmpp.Iq()
|
||
|
iq['type'] = 'set'
|
||
|
iq['privacy']['default']['name'] = name
|
||
|
return iq.send(block=block, timeout=timeout, callback=callback)
|
||
|
|
||
|
def remove_default(self, block=True, timeout=None, callback=None):
|
||
|
iq = self.xmpp.Iq()
|
||
|
iq['type'] = 'set'
|
||
|
iq['privacy'].enable('default')
|
||
|
return iq.send(block=block, timeout=timeout, callback=callback)
|
||
|
|
||
|
def edit_list(self, name, rules, block=True, timeout=None, callback=None):
|
||
|
iq = self.xmpp.Iq()
|
||
|
iq['type'] = 'set'
|
||
|
iq['privacy']['list']['name'] = name
|
||
|
priv_list = iq['privacy']['list']
|
||
|
|
||
|
if not rules:
|
||
|
rules = []
|
||
|
|
||
|
for rule in rules:
|
||
|
if isinstance(rule, Item):
|
||
|
priv_list.append(rule)
|
||
|
continue
|
||
|
|
||
|
priv_list.add_item(
|
||
|
rule['value'],
|
||
|
rule['action'],
|
||
|
rule['order'],
|
||
|
itype=rule.get('type', None),
|
||
|
iq=rule.get('iq', None),
|
||
|
message=rule.get('message', None),
|
||
|
presence_in=rule.get('presence_in',
|
||
|
rule.get('presence-in', None)),
|
||
|
presence_out=rule.get('presence_out',
|
||
|
rule.get('presence-out', None)))
|
||
|
|
||
|
def remove_list(self, name, block=True, timeout=None, callback=None):
|
||
|
iq = self.xmpp.Iq()
|
||
|
iq['type'] = 'set'
|
||
|
iq['privacy']['list']['name'] = name
|
||
|
return iq.send(block=block, timeout=timeout, callback=callback)
|