summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorent Le Coz <louiz@louiz.org>2010-10-17 02:26:06 +0800
committerLance Stout <lancestout@gmail.com>2010-10-17 08:55:30 +0800
commit2d18d905a537587ee9685877ae2c108511e57d91 (patch)
treea8e987b04525d80f1325653ddc3898b440600adc
parent4eb4d729eebd8049d68a944120360cb1f7e68895 (diff)
downloadslixmpp-2d18d905a537587ee9685877ae2c108511e57d91.tar.gz
slixmpp-2d18d905a537587ee9685877ae2c108511e57d91.tar.bz2
slixmpp-2d18d905a537587ee9685877ae2c108511e57d91.tar.xz
slixmpp-2d18d905a537587ee9685877ae2c108511e57d91.zip
Anonymous authentication
Implemented ANONYMOUS authentication on the ClientXMPP class. To use it, you just need to provide a domain (e.g 'anon.example.com') with an optional resource (e.g 'anon.example.com/resource') as the JID, with no password. The JID class has been improved to accept domains as fulljid. You can test this with echo_client.py python echo_client.py -j anon.louiz.org/ # anonymous with a resource # defined by the server python echo_client.py -j anon.louiz.org/resource # anonymous with given # resource The "normal" authentication method still works exactly like before.
-rw-r--r--sleekxmpp/clientxmpp.py4
-rw-r--r--sleekxmpp/xmlstream/jid.py8
2 files changed, 11 insertions, 1 deletions
diff --git a/sleekxmpp/clientxmpp.py b/sleekxmpp/clientxmpp.py
index 7d000bfa..9655ebab 100644
--- a/sleekxmpp/clientxmpp.py
+++ b/sleekxmpp/clientxmpp.py
@@ -304,7 +304,7 @@ class ClientXMPP(BaseXMPP):
if sasl_mechs:
for sasl_mech in sasl_mechs:
self.features.append("sasl:%s" % sasl_mech.text)
- if 'sasl:PLAIN' in self.features:
+ if 'sasl:PLAIN' in self.features and self.boundjid.user:
if sys.version_info < (3, 0):
user = bytes(self.username)
password = bytes(self.password)
@@ -318,6 +318,8 @@ class ClientXMPP(BaseXMPP):
self.send("<auth xmlns='%s' mechanism='PLAIN'>%s</auth>" % (
sasl_ns,
auth))
+ elif 'sasl:ANONYMOUS' in self.features and not self.boundjid.user:
+ self.send("<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='ANONYMOUS' />")
else:
logging.error("No appropriate login method.")
self.disconnect()
diff --git a/sleekxmpp/xmlstream/jid.py b/sleekxmpp/xmlstream/jid.py
index 789410b9..aa17c7bc 100644
--- a/sleekxmpp/xmlstream/jid.py
+++ b/sleekxmpp/xmlstream/jid.py
@@ -94,6 +94,14 @@ class JID(object):
elif name in ('server', 'domain', 'host'):
self.domain = value
elif name in ('full', 'jid'):
+ if '@' not in value:
+ if '/' in value:
+ d, r = value.split('/', 1)
+ object.__setattr__(self, "_resource", r)
+ else:
+ d = value
+ object.__setattr__(self, "_domain", d)
+ else:
self.reset(value)
elif name == 'bare':
if '@' in value: