diff options
Diffstat (limited to 'sleekxmpp/features/feature_mechanisms/stanza/auth.py')
-rw-r--r-- | sleekxmpp/features/feature_mechanisms/stanza/auth.py | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/sleekxmpp/features/feature_mechanisms/stanza/auth.py b/sleekxmpp/features/feature_mechanisms/stanza/auth.py index e069b57f..69769507 100644 --- a/sleekxmpp/features/feature_mechanisms/stanza/auth.py +++ b/sleekxmpp/features/feature_mechanisms/stanza/auth.py @@ -10,9 +10,7 @@ import base64 from sleekxmpp.thirdparty.suelta.util import bytes -from sleekxmpp.stanza import StreamFeatures -from sleekxmpp.xmlstream import ElementBase, StanzaBase, ET -from sleekxmpp.xmlstream import register_stanza_plugin +from sleekxmpp.xmlstream import StanzaBase class Auth(StanzaBase): @@ -25,15 +23,28 @@ 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: + if values: + self.xml.text = bytes(base64.b64encode(values)).decode('utf-8') + else: + self.xml.text = '=' + else: + self.xml.text = bytes(values).decode('utf-8') def del_value(self): self.xml.text = '' |