X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=zncadmin%2FZNCServerV1.class.php;h=a40f0c6658125d5424139f5b2766e35c6cb2cb44;hb=5d0acf341f782d1b99a571a88334dda3259e9d36;hp=59bbfd6e25f602d688b59b9ed44315f94d65e52e;hpb=3aa922ffd39f11a8dff55ccd09c00af9228b6bf0;p=ZNCAdmin.git diff --git a/zncadmin/ZNCServerV1.class.php b/zncadmin/ZNCServerV1.class.php index 59bbfd6..a40f0c6 100644 --- a/zncadmin/ZNCServerV1.class.php +++ b/zncadmin/ZNCServerV1.class.php @@ -98,7 +98,7 @@ class ZNCServerV1 { altnick ident */ - public function addZNC($username, $password, $settings, $servers, $modules, $others) { + 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]); @@ -128,7 +128,7 @@ class ZNCServerV1 { $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, $others)) { + if(!$this->addNetwork($username, $settings, $servers, $netmodules, $others)) { return false; } return !preg_match("/Invalid Submission/i", $html); @@ -136,7 +136,7 @@ class ZNCServerV1 { return !preg_match("/Invalid Submission/i", $html); } - public function addNetwork($username, $settings, $servers, $others) { + 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]); @@ -154,6 +154,13 @@ class ZNCServerV1 { $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; @@ -176,52 +183,34 @@ class ZNCServerV1 { } private function parseHTMLFields($html, &$post) { - preg_match_all("]*)>", $html, $matches); - foreach($matches[0] as $input) { - $fields = array(0 => ""); - $esc = false; $str = false; - $fieldid = 0; - for($i = 0; $i < strlen($input); $i++) { - if($esc) { - $esc = false; - $fields[$fieldid] .= $input[$i]; - continue; - } - if($input[$i] == "\\") { - $esc = true; - } - if($input[$i] == "\"") { - $str = !$str; - continue; - } - if($input[$i] == " " && !$str) { - $fields[++$fieldid] = ""; - continue; - } - $fields[$fieldid] .= $input[$i]; - } - $cfields = array(); - foreach($fields as $field) { - $fieldexp = explode("=", $field, 2); - if(count($fieldexp) != 2) continue; - $cfields[$fieldexp[0]] = $fieldexp[1]; - } - $name = $cfields['name']; - switch($cfields['type']) { + 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": - $value = $cfields['value']; break; case "checkbox": - if($cfields['checked']) { - $value = ($cfields['value'] ? $cfields['value'] : "1"); + if(preg_match("# checked=#", $input, $match)) { + $value = ($value ? $value : "1"); } else $value = null; break; default: $value = null; } - if($name && $value) { + if($name && $value !== null) { if(array_key_exists($name, $post)) { if(!is_array($post[$name])) { $cvalue = $post[$name]; @@ -329,9 +318,6 @@ class ZNCServerV1 { public function blockZNC($username, $block) { $html = $this->connector->get("http://".$this->host.":".$this->port."/mods/global/webadmin/edituser?user=".$username); - $handle = fopen('/home/srvx/neonserv/log.txt', 'a'); - fwrite($handle, "$html\r\n"); - fclose($handle); if(preg_match("/No such username/i", $html)) return ERR_USER_NOT_FOUND; $post = array(); $post['user'] = $username; @@ -392,6 +378,45 @@ class ZNCServerV1 { $this->connector->post("http://".$this->host.":".$this->port."/mods/global/webadmin/addchan?user=".$username.'&network=default', $post); } + public function getUserInfo($username, $loadNetInfos = false) { + $html = $this->connector->get("http://".$this->host.":".$this->port."/mods/global/webadmin/edituser?user=".$username); + if(preg_match("/No such username/i", $html)) return false; + $info = array(); + $info['loadmod'] = array(); + $this->parseHTMLFields($html, $info); + + { // parse network list + $info['networks'] = array(); + $netlist = explode("

Networks

", $html); + $netlist = explode("", $netlist[1], 2); + $netlist = explode("", $netlist[1], 2); + $netlist = explode("", $netlist[0]); + foreach($netlist as $net) { + if(preg_match_all("#(.*?)#sm", $net, $matches)) { + $network = array(); + $network['name'] = $matches[1][1]; + $network['clients'] = $matches[1][2]; + $network['server'] = $matches[1][3]; + $network['nick'] = $matches[1][4]; + + if($loadNetInfos) { + $html2 = $this->connector->get("http://".$this->host.":".$this->port."/mods/global/webadmin/editnetwork?user=".$username."&network=".$network['name']); + if(!preg_match("/No such username/i", $html2)) { + $settings = array(); + $settings['loadmod'] = array(); + $this->parseHTMLFields($html2, $settings); + $network['settings'] = $settings; + } + } + + $info['networks'][] = $network; + } + } + } + + return $info; + } + } ?> \ No newline at end of file