diff options
author | Lance Stout <lancestout@gmail.com> | 2012-10-19 00:01:02 -0700 |
---|---|---|
committer | Lance Stout <lancestout@gmail.com> | 2012-10-19 00:06:45 -0700 |
commit | e6c95f0a2acfd56ad47f60d9576a0db5458ed118 (patch) | |
tree | 86b8661cf2de3b8647c68a602c03e9853adb936f /sleekxmpp/plugins/xep_0257/stanza.py | |
parent | 63b58edda11e34b02123ff0e9944c3c2c3bc17ba (diff) | |
download | slixmpp-e6c95f0a2acfd56ad47f60d9576a0db5458ed118.tar.gz slixmpp-e6c95f0a2acfd56ad47f60d9576a0db5458ed118.tar.bz2 slixmpp-e6c95f0a2acfd56ad47f60d9576a0db5458ed118.tar.xz slixmpp-e6c95f0a2acfd56ad47f60d9576a0db5458ed118.zip |
Add support for XEP-0257: Client Certificate Management for SASL EXTERNAL
Diffstat (limited to 'sleekxmpp/plugins/xep_0257/stanza.py')
-rw-r--r-- | sleekxmpp/plugins/xep_0257/stanza.py | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/sleekxmpp/plugins/xep_0257/stanza.py b/sleekxmpp/plugins/xep_0257/stanza.py new file mode 100644 index 00000000..17e20136 --- /dev/null +++ b/sleekxmpp/plugins/xep_0257/stanza.py @@ -0,0 +1,87 @@ +""" + SleekXMPP: The Sleek XMPP Library + Copyright (C) 2012 Nathanael C. Fritz, Lance J.T. Stout + This file is part of SleekXMPP. + + See the file LICENSE for copying permission. +""" + +from sleekxmpp.xmlstream import ElementBase, ET, register_stanza_plugin + + +class Certs(ElementBase): + name = 'query' + namespace = 'urn:xmpp:saslcert:1' + plugin_attrib = 'sasl_certs' + interfaces = set() + + +class CertItem(ElementBase): + name = 'item' + namespace = 'urn:xmpp:saslcert:1' + plugin_attrib = 'item' + plugin_multi_attrib = 'items' + interfaces = set(['name', 'x509cert', 'users']) + sub_interfaces = set(['name', 'x509cert']) + + def get_users(self): + resources = self.xml.findall('{%s}users/{%s}resource' % ( + self.namespace, self.namespace)) + return set([res.text for res in resources]) + + def set_users(self, values): + users = self.xml.find('{%s}users' % self.namespace) + if users is None: + users = ET.Element('{%s}users' % self.namespace) + self.xml.append(users) + for resource in values: + res = ET.Element('{%s}resource' % self.namespace) + res.text = resource + users.append(res) + + def del_users(self): + users = self.xml.find('{%s}users' % self.namespace) + if users is not None: + self.xml.remove(users) + + +class AppendCert(ElementBase): + name = 'append' + namespace = 'urn:xmpp:saslcert:1' + plugin_attrib = 'sasl_cert_append' + interfaces = set(['name', 'x509cert', 'cert_management']) + sub_interfaces = set(['name', 'x509cert']) + + def get_cert_management(self): + manage = self.xml.find('{%s}no-cert-management' % self.namespace) + return manage is None + + def set_cert_management(self, value): + self.del_cert_management() + if not value: + manage = ET.Element('{%s}no-cert-management' % self.namespace) + self.xml.append(manage) + + def del_cert_management(self): + manage = self.xml.find('{%s}no-cert-management' % self.namespace) + if manage is not None: + self.xml.remove(manage) + + +class DisableCert(ElementBase): + name = 'disable' + namespace = 'urn:xmpp:saslcert:1' + plugin_attrib = 'sasl_cert_disable' + interfaces = set(['name']) + sub_interfaces = interfaces + + +class RevokeCert(ElementBase): + name = 'revoke' + namespace = 'urn:xmpp:saslcert:1' + plugin_attrib = 'sasl_cert_revoke' + interfaces = set(['name']) + sub_interfaces = interfaces + + +register_stanza_plugin(Certs, CertItem, iterable=True) |