Add support for MSN with X-MESSENGER-OAUTH2 SASL support.

NOTE: This requires already having the access token. It does NOT
perform any OAuth requests.
This commit is contained in:
Lance Stout 2012-01-06 23:31:58 -05:00
parent 8ef7188dae
commit c578ddeb1a
4 changed files with 33 additions and 2 deletions

View file

@ -39,6 +39,8 @@ class feature_mechanisms(base_plugin):
values['username'] = self.xmpp.boundjid.user values['username'] = self.xmpp.boundjid.user
if 'password' in values: if 'password' in values:
values['password'] = self.xmpp.password values['password'] = self.xmpp.password
if 'access_token' in values:
values['access_token'] = self.xmpp.password
mech.fulfill(values) mech.fulfill(values)
sasl_callback = self.config.get('sasl_callback', None) sasl_callback = self.config.get('sasl_callback', None)

View file

@ -25,15 +25,25 @@ class Auth(StanzaBase):
interfaces = set(('mechanism', 'value')) interfaces = set(('mechanism', 'value'))
plugin_attrib = name plugin_attrib = name
#: Some SASL mechs require sending values as is,
#: without converting base64.
plain_mechs = set(['X-MESSENGER-OAUTH2'])
def setup(self, xml): def setup(self, xml):
StanzaBase.setup(self, xml) StanzaBase.setup(self, xml)
self.xml.tag = self.tag_name() self.xml.tag = self.tag_name()
def get_value(self): def get_value(self):
return base64.b64decode(bytes(self.xml.text)) if not self['mechanism'] in self.plain_mechs:
return base64.b64decode(bytes(self.xml.text))
else:
return self.xml.text
def set_value(self, values): def set_value(self, values):
self.xml.text = bytes(base64.b64encode(values)).decode('utf-8') if not self['mechanism'] in self.plain_mechs:
self.xml.text = bytes(base64.b64encode(values)).decode('utf-8')
else:
self.xml.text = values
def del_value(self): def del_value(self):
self.xml.text = '' self.xml.text = ''

View file

@ -3,3 +3,4 @@ from sleekxmpp.thirdparty.suelta.mechanisms.plain import PLAIN
from sleekxmpp.thirdparty.suelta.mechanisms.cram_md5 import CRAM_MD5 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.digest_md5 import DIGEST_MD5
from sleekxmpp.thirdparty.suelta.mechanisms.scram_hmac import SCRAM_HMAC from sleekxmpp.thirdparty.suelta.mechanisms.scram_hmac import SCRAM_HMAC
from sleekxmpp.thirdparty.suelta.mechanisms.messenger_oauth2 import X_MESSENGER_OAUTH2

View file

@ -0,0 +1,18 @@
from sleekxmpp.thirdparty.suelta.util import hash, bytes
from sleekxmpp.thirdparty.suelta.sasl import Mechanism, register_mechanism
from sleekxmpp.thirdparty.suelta.exceptions import SASLError, SASLCancelled
class X_MESSENGER_OAUTH2(Mechanism):
def __init__(self, sasl, name):
super(X_MESSENGER_OAUTH2, self).__init__(sasl, name)
self.check_values(['access_token'])
def process(self, challenge=None):
return self.values['access_token']
def okay(self):
return True
register_mechanism('X-MESSENGER-OAUTH2', 10, X_MESSENGER_OAUTH2, use_hashes=False)