Пример #1
0
 static function server()
 {
     $session = \Sessionx::start();
     $dom = new \DOMDocument('1.0', 'UTF-8');
     $ping = $dom->createElementNS('urn:xmpp:ping', 'ping');
     \Moxl\API::request(\Moxl\API::iqWrapper($ping, $session->host, 'get'));
 }
Пример #2
0
Файл: API.php Проект: Hywan/moxl
 static function iqWrapper($xml = false, $to = false, $type = false, $id = false)
 {
     $session = \Sessionx::start();
     $dom = new \DOMDocument('1.0', 'UTF-8');
     $iq = $dom->createElementNS('jabber:client', 'iq');
     $dom->appendChild($iq);
     if ($to != false) {
         $iq->setAttribute('to', $to);
     }
     if ($type != false) {
         $iq->setAttribute('type', $type);
     }
     global $language;
     if ($id == false) {
         $id = $session->id;
     }
     $iq->setAttribute('id', $id);
     if (isset($language)) {
         $iq->setAttribute('xml:lang', $language);
     }
     if (isset($session->user)) {
         $iq->setAttribute('from', $session->user . '@' . $session->host . '/' . $session->resource);
     }
     if ($xml != false) {
         if (is_string($xml)) {
             $f = $dom->createDocumentFragment();
             $f->appendXML($xml);
             $iq->appendChild($f);
         } else {
             $xml = $dom->importNode($xml, true);
             $iq->appendChild($xml);
         }
     }
     return $dom->saveXML($dom->documentElement);
 }
Пример #3
0
 static function maker($to, $content = false, $html = false, $type = 'chat', $chatstates = false, $receipts = false)
 {
     $session = \Sessionx::start();
     $dom = new \DOMDocument('1.0', 'UTF-8');
     $root = $dom->createElementNS('jabber:client', 'message');
     $dom->appendChild($root);
     $root->setAttribute('to', str_replace(' ', '\\40', $to));
     $root->setAttribute('id', $session->id);
     $root->setAttribute('type', $type);
     if ($content != false) {
         $body = $dom->createElement('body', $content);
         $root->appendChild($body);
     }
     if ($html != false) {
         $xhtml = $dom->createElementNS('http://jabber.org/protocol/xhtml-im', 'html');
         $body = $dom->createElement('http://www.w3.org/1999/xhtml', 'body', $html);
         $xhtml->appendChild($body);
         $root->appendChild($xhtml);
     }
     if ($chatstates != false) {
         $chatstate = $dom->createElementNS('http://jabber.org/protocol/chatstates', $chatstates);
         $root->appendChild($chatstate);
     }
     if ($receipts != false) {
         if ($receipts == 'request') {
             $request = $dom->createElement('request');
         } else {
             $request = $dom->createElement('received');
             $request->setAttribute('id', $receipts);
         }
         $request->setAttribute('xmlns', 'urn:xmpp:receipts');
         $root->appendChild($request);
     }
     \Moxl\API::request($dom->saveXML($dom->documentElement));
 }
Пример #4
0
 public function handle($stanza, $parent = false)
 {
     $mec = (array) $stanza->mechanism;
     /*
      * Weird behaviour on old eJabberd servers, fixed on the new versions
      * see https://github.com/processone/ejabberd/commit/2d748115
      */
     if (isset($parent->starttls) && isset($parent->starttls->required)) {
         return;
     }
     $sessx = \Sessionx::start();
     $user = $sessx->user;
     if (isset($user)) {
         if (!is_array($mec)) {
             $mec = array($mec);
         }
         $mecchoice = str_replace('-', '', \Moxl\Auth::mechanismChoice($mec));
         $sess = \Session::start();
         $sess->set('mecchoice', $mecchoice);
         \Moxl\Utils::log("/// MECANISM CHOICE " . $mecchoice);
         if (method_exists('\\Moxl\\Auth', 'mechanism' . $mecchoice)) {
             call_user_func('Moxl\\Auth::mechanism' . $mecchoice);
         } else {
             \Moxl\Utils::log("/// MECANISM CHOICE NOT FOUND");
         }
     } else {
         $g = new Get();
         $g->setTo($sessx->host)->request();
     }
 }
Пример #5
0
 function dispatch()
 {
     $session = \Sessionx::start();
     requestURL('http://localhost:1560/disconnect/', 2, ['sid' => $session->sessionid]);
     Session::dispose();
     $this->redirect('login');
 }
Пример #6
0
 public function runRequest($request)
 {
     $c = $this->loadController($request);
     $sess = \Sessionx::start();
     $sess->refreshCookie();
     if (is_callable(array($c, 'load'))) {
         $c->name = $request;
         $c->load();
         $c->checkSession();
         $c->dispatch();
         // If the controller ask to display a different page
         if ($request != $c->name) {
             $new_name = $c->name;
             $c = $this->loadController($new_name);
             $c->name = $new_name;
             $c->load();
             $c->dispatch();
         }
         // We display the page !
         $c->display();
     } else {
         $log = new Logger('movim');
         $log->pushHandler(new SyslogHandler('movim'));
         $log->addError(t("Could not call the load method on the current controller"));
     }
 }
Пример #7
0
 public function handle($stanza, $parent = false)
 {
     $session = \Sessionx::start();
     $session->destroy();
     $this->pack($stanza->children()->getName());
     $this->deliver();
 }
Пример #8
0
 function ajaxGetForm($host)
 {
     $domain = \Moxl\Utils::getDomain($host);
     // We create a new session or clear the old one
     $s = Sessionx::start();
     $s->init(null, null, $host, $domain);
     \Moxl\Stanza\Stream::init($host);
 }
Пример #9
0
 public function handle($stanza, $parent = false)
 {
     $session = \Sessionx::start();
     //if($stanza->required) {
     $ss = new Bind();
     $ss->setResource($session->resource)->request();
     //}
 }
Пример #10
0
 public function handle($stanza, $parent = false)
 {
     $session = \Sessionx::start();
     Utils::log("/// AUTH SUCCESSFULL");
     $session->active = true;
     $session->password = '******';
     $this->pack($session);
     $this->deliver();
 }
Пример #11
0
 public function handle($stanza, $parent = false)
 {
     $sessx = \Sessionx::start();
     $user = $sessx->user;
     if (!isset($user)) {
         $r = new Get();
         $r->request();
     }
 }
Пример #12
0
 function dispatch()
 {
     $session = \Sessionx::start();
     //requestURL('http://localhost:1560/unregister/', 2, ['sid' => $session->sessionid]);
     $this->page->setTitle(__('page.login'));
     $user = new User();
     if ($user->isLogged()) {
         $this->redirect('root');
     }
 }
Пример #13
0
 public function handle($stanza, $parent = false)
 {
     $session = \Sessionx::start();
     list($jid, $resource) = explode('/', (string) $stanza->bind->jid);
     list($session->username, $session->host) = explode('@', $jid);
     if ($resource) {
         $session->resource = $resource;
     }
     $ss = new Start();
     $ss->setTo($session->host)->request();
 }
Пример #14
0
Файл: Muc.php Проект: Hywan/moxl
 static function setSubject($to, $subject)
 {
     $session = \Sessionx::start();
     $dom = new \DOMDocument('1.0', 'UTF-8');
     $message = $dom->createElementNS('jabber:client', 'message');
     $dom->appendChild($message);
     $message->setAttribute('to', str_replace(' ', '\\40', $to));
     $message->setAttribute('id', $session->id);
     $message->setAttribute('type', 'groupchat');
     $message->appendChild($dom->createElement('subject', $subject));
     \Moxl\API::request($dom->saveXML($dom->documentElement));
 }
Пример #15
0
 public function handle($stanza, $parent = false)
 {
     $session = \Session::start();
     $session->remove('password');
     $session->set('active', true);
     $session = \Sessionx::start();
     Utils::log("/// AUTH SUCCESSFULL");
     // And we tell the daemon that the session is started !
     fwrite(STDERR, 'started');
     $session->active = true;
     $this->pack($session);
     $this->deliver();
 }
Пример #16
0
 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);
 }
Пример #17
0
 public final function store()
 {
     $sess = \Session::start();
     //$_instances = $sess->get('xecinstances');
     // Set a new Id for the Iq request
     $session = \Sessionx::start();
     // Generating the iq key.
     $id = $session->id = \generateKey(6);
     // We serialize the current object
     $obj = new \StdClass();
     $obj->type = get_class($this);
     $obj->object = serialize($this);
     $obj->time = time();
     //$_instances = $this->clean($_instances);
     $sess->set($id, $obj);
 }
Пример #18
0
 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;
     }
 }
Пример #19
0
 function ajaxLogin($username)
 {
     $validate_user = Validator::string()->length(4, 40);
     if (!$validate_user->validate($username)) {
         Notification::append(null, $this->__('login_anonymous.bad_username'));
         return;
     }
     // We get the Server Configuration
     $cd = new \Modl\ConfigDAO();
     $config = $cd->get();
     $host = 'anonymous.jappix.com';
     $password = '******';
     // We try to get the domain
     $domain = \Moxl\Utils::getDomain($host);
     // We launch the XMPP socket
     RPC::call('register', $host);
     // We set the username in the session
     $s = Session::start();
     $s->set('username', $username);
     // We create a new session or clear the old one
     $s = Sessionx::start();
     $s->init($username, $password, $host, $domain);
     \Moxl\Stanza\Stream::init($host);
 }
Пример #20
0
 public function load()
 {
     $sd = new modl\SessionxDAO();
     $session = $sd->get(self::$_sessionid);
     if (isset($session)) {
         $this->_user = $session->username;
         $this->_password = $session->password;
         $this->_hash = $session->hash;
         $this->_resource = $session->resource;
         $this->_host = $session->host;
         $this->_config = unserialize($session->config);
         $this->_active = $session->active;
         $this->_start = $session->start;
         $this->_timestamp = $session->timestamp;
     }
     self::$_instance = $this;
 }
Пример #21
0
 private function startingSession()
 {
     $s = \Sessionx::start();
     $s->load();
     $user = new User();
     $db = modl\Modl::getInstance();
     $db->setUser($user->getLogin());
 }
Пример #22
0
 function ajaxSubmit($data, $node, $sessionid)
 {
     $session = \Sessionx::start();
     $s = new Submit();
     $s->setTo($session->host)->setNode($node)->setData($data)->setSessionid($sessionid)->request();
 }
Пример #23
0
 public function __set($key, $value)
 {
     if ($key == 'config') {
         $value = serialize($value);
     } elseif ($key == 'user') {
         $key = 'username';
     }
     if ($key == 'id') {
         $this->_id = $value;
         self::$_instance = $this;
     } else {
         $sd = new modl\SessionxDAO();
         $sd->update(self::$_sessionid, $key, $value);
     }
 }
Пример #24
0
     $conn->close();
     $loop->stop();
 } elseif ($message == "<proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>" || $message == '<proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>') {
     stream_set_blocking($conn->stream, 1);
     $out = stream_socket_enable_crypto($conn->stream, 1, STREAM_CRYPTO_METHOD_TLS_CLIENT);
     $restart = true;
 }
 #fwrite(STDERR, colorize($message, 'yellow')." : ".colorize('received', 'green')."\n");
 #fwrite(STDERR, colorize(getenv('sid'), 'yellow')." widgets : ".\sizeToCleanSize(memory_get_usage())."\n");
 \Moxl\API::clear();
 \RPC::clear();
 if (!$parser->parse($message)) {
     fwrite(STDERR, colorize(getenv('sid'), 'yellow') . " " . $parser->getError() . "\n");
 }
 if ($restart) {
     $session = \Sessionx::start();
     \Moxl\Stanza\Stream::init($session->host);
     stream_set_blocking($conn->stream, 0);
     $restart = false;
 }
 $msg = \RPC::commit();
 \RPC::clear();
 if (!empty($msg)) {
     echo base64_encode(gzcompress(json_encode($msg), 9)) . "";
     #fwrite(STDERR, colorize($msg.' '.strlen($msg), 'yellow')." : ".colorize('sent to browser', 'green')."\n");
 }
 $xml = \Moxl\API::commit();
 \Moxl\API::clear();
 if (!empty($xml)) {
     $conn->write(trim($xml));
     #fwrite(STDERR, colorize(trim($xml), 'yellow')." : ".colorize('sent to XMPP', 'green')."\n");
Пример #25
0
 function ajaxLogin($form)
 {
     // We get the Server Configuration
     $cd = new \Modl\ConfigDAO();
     $config = $cd->get();
     // First we check the form
     $validate_login = Validator::email()->length(6, 40);
     $validate_password = Validator::string()->length(4, 40);
     $login = $form->login->value;
     $password = $form->pass->value;
     if (!$validate_login->validate($login)) {
         $this->showErrorBlock('login_format');
         return;
     }
     if (!$validate_password->validate($password)) {
         $this->showErrorBlock('password_format');
         return;
     }
     list($username, $host) = explode('@', $login);
     // Check whitelisted server
     if ($config->xmppwhitelist != '' && !in_array($host, explode(',', $config->xmppwhitelist))) {
         $this->showErrorBlock('unauthorized');
         return;
     }
     // We check if we already have an open session
     $sd = new \Modl\SessionxDAO();
     $here = $sd->getHash(sha1($username . $password . $host));
     if ($here) {
         RPC::call('Login.setCookie', $here->session);
         RPC::call('movim_redirect', Route::urlize('main'));
         $this->showErrorBlock('conflict');
         return;
     }
     // We try to get the domain
     $domain = \Moxl\Utils::getDomain($host);
     // We launch the XMPP socket
     RPC::call('register', $host);
     // We create a new session or clear the old one
     $s = Sessionx::start();
     $s->init($username, $password, $host, $domain);
     \Moxl\Stanza\Stream::init($host);
 }
Пример #26
0
 function preparePresenceList()
 {
     $txt = getPresences();
     $txts = getPresencesTxt();
     $session = \Sessionx::start();
     $pd = new \Modl\PresenceDAO();
     $p = $pd->getPresence($this->user->getLogin(), $session->resource);
     $cd = new \Modl\ContactDAO();
     $contact = $cd->get($this->user->getLogin());
     if ($contact == null) {
         $contact = new \Modl\Contact();
     }
     $presencetpl = $this->tpl();
     $presencetpl->assign('contact', $contact);
     $presencetpl->assign('p', $p);
     $presencetpl->assign('txt', $txt);
     $presencetpl->assign('txts', $txts);
     $presencetpl->assign('calllogout', $this->call('ajaxLogout'));
     $html = $presencetpl->draw('_presence_list', true);
     return $html;
 }
Пример #27
0
 function isSupported($key)
 {
     $this->reload();
     if ($this->caps != null) {
         switch ($key) {
             case 'pubsub':
                 return in_array('http://jabber.org/protocol/pubsub#publish', $this->caps);
                 break;
             case 'upload':
                 $id = new \Modl\ItemDAO();
                 return $id->getUpload($this->getServer()) != null;
                 break;
             default:
                 return false;
                 break;
         }
     } elseif ($key == 'anonymous') {
         $session = \Sessionx::start();
         return $session->mechanism == 'ANONYMOUS';
     } else {
         return false;
     }
 }
Пример #28
0
 static function muc($to, $nickname = false)
 {
     $session = \Sessionx::start();
     if ($nickname == false) {
         $nickname = $session->user;
     }
     $dom = new \DOMDocument('1.0', 'UTF-8');
     $presence = $dom->createElementNS('jabber:client', 'presence');
     $dom->appendChild($presence);
     $presence->setAttribute('from', $session->user . '@' . $session->host . '/' . $session->resource);
     $presence->setAttribute('id', $session->id);
     $presence->setAttribute('to', $to . '/' . $nickname);
     $presence->appendChild($dom->createElementNS('http://jabber.org/protocol/muc', 'x'));
     \Moxl\API::request($dom->saveXML($dom->documentElement));
 }
Пример #29
0
 /**
  * @brief Send a message
  *
  * @param string $to
  * @param string $message
  * @return void
  */
 function ajaxSendMessage($to, $message, $muc = false, $resource = false)
 {
     if ($message == '') {
         return;
     }
     $m = new \Modl\Message();
     $m->session = $this->user->getLogin();
     $m->jidto = echapJid($to);
     $m->jidfrom = $this->user->getLogin();
     $session = \Sessionx::start();
     $m->type = 'chat';
     $m->resource = $session->resource;
     if ($muc) {
         $m->type = 'groupchat';
         $s = Session::start();
         $m->resource = $s->get('username');
         if ($m->resource == null) {
             $m->resource = $session->user;
         }
         $m->jidfrom = $to;
     }
     $m->body = rawurldecode($message);
     $m->html = prepareString($m->body, false, true);
     $m->published = gmdate('Y-m-d H:i:s');
     $m->delivered = gmdate('Y-m-d H:i:s');
     if ($resource != false) {
         $to = $to . '/' . $resource;
     }
     // We decode URL codes to send the correct message to the XMPP server
     $p = new Publish();
     $p->setTo($to);
     //$p->setHTML($m->html);
     $p->setContent(htmlspecialchars($m->body));
     if ($muc) {
         $p->setMuc();
     }
     $p->request();
     /* Is it really clean ? */
     if (!$p->getMuc()) {
         if (!preg_match('#^\\?OTR#', $m->body)) {
             $md = new \Modl\MessageDAO();
             $md->set($m);
         }
         $packet = new Moxl\Xec\Payload\Packet();
         $packet->content = $m;
         $this->onMessage($packet);
     }
 }
Пример #30
0
 function checkConnected($room, $resource = false)
 {
     if (!$this->validateRoom($room)) {
         return;
     }
     if ($resource && !$this->validateResource($resource)) {
         Notification::append(null, $this->__('chatrooms.bad_id'));
         return;
     }
     $pd = new \modl\PresenceDAO();
     if ($resource == false) {
         $session = \Sessionx::start();
         $resource = $session->user;
     }
     $presence = $pd->getPresence($room, $resource);
     if ($presence != null) {
         return true;
     } else {
         return false;
     }
 }