. */ $classinfo = array( "name" => "ZNCServerV1", "version" => 1.000, ); class ZNCServerV1 { private $host, $port; private $connector; public function ZNCServerV1($host, $port, $connector = NULL) { $this->host = $host; $this->port = $port; if($connector == NULL) $connector = new HTTPConnector(); $this->connector = $connector; } public function login($user, $pass) { $post = array( "user" => $user, "pass" => $pass, "submitted" => "1" ); $this->connector->post("http://".$this->host.":".$this->port."/login", $post); $http = $this->connector->get("http://".$this->host.":".$this->port."/?cookie_check=true"); $logged_in = !preg_match("/errorbar/i", $http); return $logged_in; } public function getUserList() { $html = $this->connector->get("http://".$this->host.":".$this->port."/mods/global/webadmin/listusers"); $exp = explode('
', $html); $exp = explode('
', $exp[1]); $exp = explode('', $exp[0]); $exp = explode('', $exp[1]); $list = explode('', $list[$i]); $exp2 = explode('', $exp[2]); $userdata['user'] = $exp2[0]; $exp2 = explode('', $exp[3]); $userdata['server'] = $exp2[0]; $exp2 = explode('', $exp[4]); $userdata['clients'] = $exp2[0]; $userlist[] = $userdata; } return $userlist; } public function getSeenList() { $html = $this->connector->get("http://".$this->host.":".$this->port."/mods/global/lastseen/"); $exp = explode('
', $html); $exp = explode('
', $exp[1]); $exp = explode('', $exp[0]); $exp = explode('', $exp[1]); $list = explode('', $list[$i]); $exp2 = explode('', $exp[1]); $userdata['user'] = $exp2[0]; $exp2 = explode('', $exp[2]); $userdata['seen'] = $exp2[0]; $userdata['seen_unix'] = strtotime($exp2[0]); $exp2 = explode('', $exp[3]); $userdata['info'] = $exp2[0]; $seenlist[] = $userdata; } return $seenlist; } /* $settings array elements: nick altnick ident */ public function addZNC($username, $password, $settings, $servers, $modules, $netmodules, $others) { $html = $this->connector->get("http://".$this->host.":".$this->port."/mods/global/webadmin/adduser"); $exp = explode('name="_CSRF_Check" value="', $html); $exp = explode('"', $exp[1]); $csrf = $exp[0]; $post = array(); $post['_CSRF_Check'] = $csrf; $post['submitted'] = '1'; //$post['doconnect'] = '1'; $post['user'] = $username; $post['password'] = $password; $post['password2'] = $password; $post['nick'] = $settings['nick']; $post['altnick'] = $settings['altnick']; $post['ident'] = $settings['ident']; $post['statusprefix'] = '*'; $post['loadmod'] = array(); foreach($modules as $name => $args) { $post['loadmod'][] = $name; if($args != "") $post['modargs_'.$name] = $args; } foreach($others as $name => $value) { $post[$name] = $value; } $html = $this->connector->post("http://".$this->host.":".$this->port."/mods/global/webadmin/adduser", $post); if(!preg_match("/Invalid Submission/i", $html)) { if(!$this->addNetwork($username, $settings, $servers, $netmodules, $others)) { return false; } return !preg_match("/Invalid Submission/i", $html); } return !preg_match("/Invalid Submission/i", $html); } public function addNetwork($username, $settings, $servers, $modules, $others) { $html = $this->connector->get("http://".$this->host.":".$this->port."/mods/global/webadmin/addnetwork?user=".$username); $exp = explode('name="_CSRF_Check" value="', $html); $exp = explode('"', $exp[1]); $csrf = $exp[0]; $post = array(); $post['_CSRF_Check'] = $csrf; $post['submitted'] = '1'; $post['network'] = 'default'; $post['nick'] = $settings['nick']; $post['altnick'] = $settings['altnick']; $post['ident'] = $settings['ident']; $post['servers'] = implode("\n", $servers); $post['doconnect'] = '1'; $post['floodprotection'] = '1'; $post['floodrate'] = '1.0'; $post['floodburst'] = '4'; $post['user'] = $username; $post['loadmod'] = array(); foreach($modules as $name => $args) { $post['loadmod'][] = $name; if($args != "") $post['modargs_'.$name] = $args; } foreach($others as $name => $value) { $post[$name] = $value; } $html = $this->connector->post("http://".$this->host.":".$this->port."/mods/global/webadmin/addnetwork", $post); return !preg_match("/Invalid Submission/i", $html); } public function delZNC($username) { $html = $this->connector->get("http://".$this->host.":".$this->port."/mods/global/webadmin/deluser?user=".$username); $exp = explode('name="_CSRF_Check" value="', $html); $exp = explode('"', $exp[1]); $csrf = $exp[0]; $post = array(); $post['_CSRF_Check'] = $csrf; $post['submitted'] = '1'; $post['user'] = $username; $this->connector->post("http://".$this->host.":".$this->port."/mods/global/webadmin/deluser", $post); } private function parseHTMLFields($html, &$post) { preg_match_all("##", $html, $matches); foreach($matches[1] as $input) { if(preg_match("#name=\"(.*?)\"#", $input, $match)) $name = $match[1]; else $name = null; if(preg_match("#type=\"(.*?)\"#", $input, $match)) $type = $match[1]; else $type = null; if(preg_match("#value=\"(.*?)\"#", $input, $match)) $value = $match[1]; else $value= null; switch($type) { case "text": case "hidden": break; case "checkbox": if(preg_match("# checked=#", $input, $match)) { $value = ($value ? $value : "1"); } else $value = null; break; default: $value = null; } if($name && $value !== null) { if(array_key_exists($name, $post)) { if(!is_array($post[$name])) { $cvalue = $post[$name]; $post[$name] = array(); $post[$name][] = $cvalue; } $post[$name][] = $value; } else $post[$name] = $value; } } //textareas $textareas = explode("