Skip to content
Back to top

# Source code for slixmpp.plugins.xep_0257.stanza

    # Slixmpp: The Slick XMPP Library
    # Copyright (C) 2012 Nathanael C. Fritz, Lance J.T. Stout
    # This file is part of Slixmpp.
    # See the file LICENSE for copying permission.
    from slixmpp.xmlstream import ElementBase, ET, register_stanza_plugin

    class Certs(ElementBase):
        name = 'items'
        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 = {'name', 'x509cert', 'users'}
        sub_interfaces = {'name', 'x509cert'}

        def get_users(self):
            resources = self.xml.findall('{%s}users/{%s}resource' % (
                self.namespace, self.namespace))
            return {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 = {'name', 'x509cert', 'cert_management'}
        sub_interfaces = {'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 = {'name'}
        sub_interfaces = interfaces

    class RevokeCert(ElementBase):
        name = 'revoke'
        namespace = 'urn:xmpp:saslcert:1'
        plugin_attrib = 'sasl_cert_revoke'
        interfaces = {'name'}
        sub_interfaces = interfaces

    register_stanza_plugin(Certs, CertItem, iterable=True)