static function mechanismSCRAMSHA1() { $s = new SASL2(); $fa = $s->factory('SCRAM-SHA1'); $session = \Session::start(); Utils::log("/// INITIAL MESSAGE"); $response = base64_encode($fa->getResponse($session->get('username'), $session->get('password'))); $session->set('saslfa', $fa); $dom = new \DOMDocument('1.0', 'UTF-8'); $auth = $dom->createElementNS('urn:ietf:params:xml:ns:xmpp-sasl', 'auth', $response); $auth->setAttribute('mechanism', 'SCRAM-SHA-1'); $dom->appendChild($auth); API::request($dom->saveXML($dom->documentElement)); }
static function mechanismSCRAMSHA1() { $s = new SASL2(); $fa = $s->factory('SCRAM-SHA1'); $session = \Sessionx::start(); Utils::log("/// INITIAL MESSAGE"); $response = base64_encode($fa->getResponse($session->user, $session->password)); $sess = \Session::start(); $sess->set('saslfa', $fa); $xml = '<auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="SCRAM-SHA-1"> ' . $response . ' </auth>'; API::request($xml); }
public function handle($stanza, $parent = false) { $sess = \Session::start(); $session = \Sessionx::start(); $s = new SASL2(); switch ($sess->get('mecchoice')) { case 'SCRAMSHA1': $fa = $sess->get('saslfa'); $sess->remove('saslfa'); $challenge = base64_decode((string) $stanza); \Moxl\Utils::log("/// SECOND MESSAGE - PROOF"); $response = base64_encode($fa->getResponse($session->user, $session->password, $challenge)); $xml = '<response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">' . $response . '</response>'; \Moxl\API::request($xml); break; case 'DIGESTMD5': $decoded = base64_decode((string) $stanza); $s = new SASL2(); $d = $s->factory('digest-md5'); if (!$sess->get('saslfirst')) { \Moxl\Utils::log("/// CHALLENGE"); $response = $d->getResponse($session->user, $session->password, $decoded, $session->host, 'xmpp'); $response = base64_encode($response); $xml = '<response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">' . $response . '</response>'; $sess->set('saslfirst', 1); } else { $xml = '<response xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>'; } \Moxl\API::request($xml); break; case 'CRAMMD5': $decoded = base64_decode((string) $stanza); $s = new SASL2(); $c = $s->factory('cram-md5'); $session = \Sessionx::start(); $response = $c->getResponse($session->user, $session->pass, $decoded); $response = base64_encode($response); \Moxl\Utils::log("/// CHALLENGE"); $xml = '<response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">' . $response . '</response>'; \Moxl\API::request($xml); break; } }