summaryrefslogtreecommitdiff
path: root/sleekxmpp/features/sasl_plain.py
diff options
context:
space:
mode:
authorLance Stout <lancestout@gmail.com>2011-06-30 15:40:22 -0700
committerLance Stout <lancestout@gmail.com>2011-06-30 15:40:22 -0700
commit754ac5092a3a37819a71f6565a1e54b3f2547940 (patch)
tree8eac47a45f53e7f5bca0ffe312409dbb71924e42 /sleekxmpp/features/sasl_plain.py
parent9ed972ffeba8f5071d5cae8497322764207fec04 (diff)
downloadslixmpp-754ac5092a3a37819a71f6565a1e54b3f2547940.tar.gz
slixmpp-754ac5092a3a37819a71f6565a1e54b3f2547940.tar.bz2
slixmpp-754ac5092a3a37819a71f6565a1e54b3f2547940.tar.xz
slixmpp-754ac5092a3a37819a71f6565a1e54b3f2547940.zip
Reorganize features into plugins.
Diffstat (limited to 'sleekxmpp/features/sasl_plain.py')
-rw-r--r--sleekxmpp/features/sasl_plain.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/sleekxmpp/features/sasl_plain.py b/sleekxmpp/features/sasl_plain.py
new file mode 100644
index 00000000..36c7d9df
--- /dev/null
+++ b/sleekxmpp/features/sasl_plain.py
@@ -0,0 +1,41 @@
+import base64
+import sys
+import logging
+
+from sleekxmpp.stanza.stream import sasl
+from sleekxmpp.plugins.base import base_plugin
+
+
+log = logging.getLogger(__name__)
+
+
+class sasl_plain(base_plugin):
+
+ def plugin_init(self):
+ self.name = 'SASL PLAIN'
+ self.rfc = '6120'
+ self.description = 'SASL PLAIN Mechanism'
+
+ self.xmpp.register_sasl_mechanism('PLAIN',
+ self._handle_plain,
+ priority=self.config.get('priority', 1))
+
+ def _handle_plain(self):
+ if not self.xmpp.boundjid.user:
+ return False
+
+ if sys.version_info < (3, 0):
+ user = bytes(self.xmpp.boundjid.user)
+ password = bytes(self.xmpp.password)
+ else:
+ user = bytes(self.xmpp.boundjid.user, 'utf-8')
+ password = bytes(self.xmpp.password, 'utf-8')
+
+ auth = base64.b64encode(b'\x00' + user + \
+ b'\x00' + password).decode('utf-8')
+
+ resp = sasl.Auth(self.xmpp)
+ resp['mechanism'] = 'PLAIN'
+ resp['value'] = auth
+ resp.send(now=True)
+ return True