summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLance Stout <lancestout@gmail.com>2012-01-20 01:24:05 -0800
committerLance Stout <lancestout@gmail.com>2012-01-20 01:24:05 -0800
commit71ea430c6244e77ce4b238ff7c19afff2cc6d93a (patch)
tree2970dbdc126753b031e4841036f1829d18d342ba
parent0d2125e737d28c8cf8aad0fd80b72179b8e7b914 (diff)
downloadslixmpp-71ea430c6244e77ce4b238ff7c19afff2cc6d93a.tar.gz
slixmpp-71ea430c6244e77ce4b238ff7c19afff2cc6d93a.tar.bz2
slixmpp-71ea430c6244e77ce4b238ff7c19afff2cc6d93a.tar.xz
slixmpp-71ea430c6244e77ce4b238ff7c19afff2cc6d93a.zip
Add support for X-FACEBOOK-PLATFORM SASL mechanism.
This requires an extra credential for SASL authentication: xmpp = ClientXMPP('user@chat.facebook.com', '...access_token...') xmpp.credentials['api_key'] = '...api_key...'
-rw-r--r--sleekxmpp/thirdparty/suelta/mechanisms/__init__.py1
-rw-r--r--sleekxmpp/thirdparty/suelta/mechanisms/facebook_platform.py39
2 files changed, 40 insertions, 0 deletions
diff --git a/sleekxmpp/thirdparty/suelta/mechanisms/__init__.py b/sleekxmpp/thirdparty/suelta/mechanisms/__init__.py
index e115e5d5..e3facdee 100644
--- a/sleekxmpp/thirdparty/suelta/mechanisms/__init__.py
+++ b/sleekxmpp/thirdparty/suelta/mechanisms/__init__.py
@@ -4,3 +4,4 @@ from sleekxmpp.thirdparty.suelta.mechanisms.cram_md5 import CRAM_MD5
from sleekxmpp.thirdparty.suelta.mechanisms.digest_md5 import DIGEST_MD5
from sleekxmpp.thirdparty.suelta.mechanisms.scram_hmac import SCRAM_HMAC
from sleekxmpp.thirdparty.suelta.mechanisms.messenger_oauth2 import X_MESSENGER_OAUTH2
+from sleekxmpp.thirdparty.suelta.mechanisms.facebook_platform import X_FACEBOOK_PLATFORM
diff --git a/sleekxmpp/thirdparty/suelta/mechanisms/facebook_platform.py b/sleekxmpp/thirdparty/suelta/mechanisms/facebook_platform.py
new file mode 100644
index 00000000..5b80c9f5
--- /dev/null
+++ b/sleekxmpp/thirdparty/suelta/mechanisms/facebook_platform.py
@@ -0,0 +1,39 @@
+from sleekxmpp.thirdparty.suelta.util import bytes
+from sleekxmpp.thirdparty.suelta.sasl import Mechanism, register_mechanism
+
+try:
+ import urlparse
+except ImportError:
+ import urllib.parse as urlparse
+
+
+
+class X_FACEBOOK_PLATFORM(Mechanism):
+
+ def __init__(self, sasl, name):
+ super(X_FACEBOOK_PLATFORM, self).__init__(sasl, name)
+ self.check_values(['access_token', 'api_key'])
+
+ def process(self, challenge=None):
+ if challenge is not None:
+ values = {}
+ for kv in challenge.split('&'):
+ key, value = kv.split('=')
+ values[key] = value
+
+ resp_data = {
+ 'method': values['method'],
+ 'v': '1.0',
+ 'call_id': '1.0',
+ 'nonce': values['nonce'],
+ 'access_token': self.values['access_token'],
+ 'api_key': self.values['api_key']
+ }
+ resp = '&'.join(['%s=%s' % (k, v) for k, v in resp_data.items()])
+ return bytes(resp)
+ return bytes('')
+
+ def okay(self):
+ return True
+
+register_mechanism('X-FACEBOOK-PLATFORM', 40, X_FACEBOOK_PLATFORM, use_hashes=False)