Simplify SASL mech registration.

Moved SASL registration completely to the feature plugin, instead of
keeping a portion of it in ClientXMPP.
This commit is contained in:
Lance Stout 2011-07-02 21:57:50 -07:00
parent b0297af38d
commit fba235a801
5 changed files with 8 additions and 40 deletions

View file

@ -197,32 +197,6 @@ class ClientXMPP(BaseXMPP):
self._stream_feature_order.append((order, name)) self._stream_feature_order.append((order, name))
self._stream_feature_order.sort() self._stream_feature_order.sort()
def register_sasl_mechanism(self, name, handler, priority=0):
"""
Register a handler for a SASL authentication mechanism.
Arguments:
name -- The name of the mechanism (all caps)
handler -- The function that will perform the
authentication. The function must
return True if it is able to carry
out the authentication, False if
a required condition is not met.
priority -- An integer value indicating the
preferred ordering for the mechanism.
High values will be attempted first.
"""
self['feature_mechanisms'].register_mechanism(name, handler, priority)
def remove_sasl_mechanism(self, name):
"""
Remove support for a given SASL authentication mechanism.
Arguments:
name -- The name of the mechanism to remove (all caps)
"""
self['feature_mechanisms'].remove_mechanism(name)
def update_roster(self, jid, name=None, subscription=None, groups=[], def update_roster(self, jid, name=None, subscription=None, groups=[],
block=True, timeout=None, callback=None): block=True, timeout=None, callback=None):
""" """

View file

@ -51,7 +51,7 @@ class feature_mechanisms(base_plugin):
restart=True, restart=True,
order=self.config.get('order', 100)) order=self.config.get('order', 100))
def register_mechanism(self, name, handler, priority=0): def register(self, name, handler, priority=0):
""" """
Register a handler for a SASL authentication mechanism. Register a handler for a SASL authentication mechanism.
@ -70,7 +70,7 @@ class feature_mechanisms(base_plugin):
self._mechanism_priorities.append((priority, name)) self._mechanism_priorities.append((priority, name))
self._mechanism_priorities.sort(reverse=True) self._mechanism_priorities.sort(reverse=True)
def remove_mechanism(self, name): def remove(self, name):
""" """
Remove support for a given SASL authentication mechanism. Remove support for a given SASL authentication mechanism.

View file

@ -14,8 +14,9 @@ class sasl_anonymous(base_plugin):
self.name = 'SASL ANONYMOUS' self.name = 'SASL ANONYMOUS'
self.rfc = '6120' self.rfc = '6120'
self.description = 'SASL ANONYMOUS Mechanism' self.description = 'SASL ANONYMOUS Mechanism'
self.stanza = self.xmpp['feature_mechanisms'].stanza
self.xmpp.register_sasl_mechanism('ANONYMOUS', self.xmpp['feature_mechanisms'].register('ANONYMOUS',
self._handle_anonymous, self._handle_anonymous,
priority=self.config.get('priority', 0)) priority=self.config.get('priority', 0))
@ -23,7 +24,7 @@ class sasl_anonymous(base_plugin):
if self.xmpp.boundjid.user: if self.xmpp.boundjid.user:
return False return False
resp = self.xmpp['feature_sasl'].stanza.Auth(self.xmpp) resp = self.stanza.Auth(self.xmpp)
resp['mechanism'] = 'ANONYMOUS' resp['mechanism'] = 'ANONYMOUS'
resp.send(now=True) resp.send(now=True)

View file

@ -14,8 +14,9 @@ class sasl_plain(base_plugin):
self.name = 'SASL PLAIN' self.name = 'SASL PLAIN'
self.rfc = '6120' self.rfc = '6120'
self.description = 'SASL PLAIN Mechanism' self.description = 'SASL PLAIN Mechanism'
self.stanza = self.xmpp['feature_mechanisms'].stanza
self.xmpp.register_sasl_mechanism('PLAIN', self.xmpp['feature_mechanisms'].register('PLAIN',
self._handle_plain, self._handle_plain,
priority=self.config.get('priority', 1)) priority=self.config.get('priority', 1))
@ -33,7 +34,7 @@ class sasl_plain(base_plugin):
auth = base64.b64encode(b'\x00' + user + \ auth = base64.b64encode(b'\x00' + user + \
b'\x00' + password).decode('utf-8') b'\x00' + password).decode('utf-8')
resp = self.xmpp['feature_mechanisms'].stanza.Auth(self.xmpp) resp = self.stanza.Auth(self.xmpp)
resp['mechanism'] = 'PLAIN' resp['mechanism'] = 'PLAIN'
resp['value'] = auth resp['value'] = auth
resp.send(now=True) resp.send(now=True)

View file

@ -1,8 +0,0 @@
"""
SleekXMPP: The Sleek XMPP Library
Copyright (C) 2010 Nathanael C. Fritz
This file is part of SleekXMPP.
See the file LICENSE for copying permission.
"""