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:
parent
8ef7188dae
commit
c578ddeb1a
4 changed files with 33 additions and 2 deletions
|
@ -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)
|
||||||
|
|
|
@ -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 = ''
|
||||||
|
|
|
@ -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
|
||||||
|
|
18
sleekxmpp/thirdparty/suelta/mechanisms/messenger_oauth2.py
vendored
Normal file
18
sleekxmpp/thirdparty/suelta/mechanisms/messenger_oauth2.py
vendored
Normal 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)
|
Loading…
Reference in a new issue