def setMechanism(self): """ Select and setup authentication mechanism. Uses the authenticator's C{jid} and C{password} attribute for the authentication credentials. If no supported SASL mechanisms are advertized by the receiving party, a failing deferred is returned with a L{SASLNoAcceptableMechanism} exception. """ jid = self.xmlstream.authenticator.jid password = self.xmlstream.authenticator.password mechanisms = get_mechanisms(self.xmlstream) if jid.user is not None: if 'DIGEST-MD5' in mechanisms: self.mechanism = sasl_mechanisms.DigestMD5( 'xmpp', jid.host, None, jid.user, password) elif 'PLAIN' in mechanisms: self.mechanism = sasl_mechanisms.Plain(None, jid.user, password) else: raise SASLNoAcceptableMechanism() else: if 'ANONYMOUS' in mechanisms: self.mechanism = sasl_mechanisms.Anonymous() else: raise SASLNoAcceptableMechanism()
def start(self): """ Start SASL authentication exchange. Used the authenticator's C{jid} and C{password} attribute for the authentication credentials. If no supported SASL mechanisms are advertized by the receiving party, a failing deferred is returned with a L{SASLNoAcceptableMechanism} exception. """ jid = self.xmlstream.authenticator.jid password = self.xmlstream.authenticator.password mechanisms = get_mechanisms(self.xmlstream) if 'DIGEST-MD5' in mechanisms: self.mechanism = sasl_mechanisms.DigestMD5('xmpp', jid.host, None, jid.user, password) elif 'PLAIN' in mechanisms: self.mechanism = sasl_mechanisms.Plain(None, jid.user, password) else: return defer.fail(SASLNoAcceptableMechanism) self._deferred = defer.Deferred() self.xmlstream.addObserver('/challenge', self.onChallenge) self.xmlstream.addOnetimeObserver('/success', self.onSuccess) self.xmlstream.addOnetimeObserver('/failure', self.onFailure) self.sendAuth(self.mechanism.getInitialResponse()) return self._deferred
def test_getInitialResponse(self): """ Test the initial response. """ m = sasl_mechanisms.Plain(None, 'test', 'secret') self.assertEqual(m.getInitialResponse(), '\x00test\x00secret')
def test_getInitialResponse(self): """ Test the initial response. """ m = sasl_mechanisms.Plain(None, "test", "secret") self.assertEqual(m.getInitialResponse(), b"\x00test\x00secret")