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
|
||||
if 'password' in values:
|
||||
values['password'] = self.xmpp.password
|
||||
if 'access_token' in values:
|
||||
values['access_token'] = self.xmpp.password
|
||||
mech.fulfill(values)
|
||||
|
||||
sasl_callback = self.config.get('sasl_callback', None)
|
||||
|
|
|
@ -25,15 +25,25 @@ class Auth(StanzaBase):
|
|||
interfaces = set(('mechanism', 'value'))
|
||||
plugin_attrib = name
|
||||
|
||||
#: Some SASL mechs require sending values as is,
|
||||
#: without converting base64.
|
||||
plain_mechs = set(['X-MESSENGER-OAUTH2'])
|
||||
|
||||
def setup(self, xml):
|
||||
StanzaBase.setup(self, xml)
|
||||
self.xml.tag = self.tag_name()
|
||||
|
||||
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):
|
||||
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):
|
||||
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.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
|
||||
|
|
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