- public function delZNC($username) {
- $html = $this->connector->get("http://".$this->host.":".$this->port."/mods/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/webadmin/deluser", $post);
- }
-
- private function parseHTMLFields($html, &$post) {
- preg_match_all("<input ([^\>]*)>", $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']) {
- case "text":
- case "hidden":
- $value = $cfields['value'];
- break;
- case "checkbox":
- if($cfields['checked']) {
- $value = ($cfields['value'] ? $cfields['value'] : "1");
- } else
- $value = null;
- break;
- default:
- $value = null;
- }
- if($name && $value) {
- 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("<textarea ", $html);
- for($i = 1; $i < count($textareas); $i++) {
- $exp = explode(">", $textareas[$i]);
- $name = explode("name=\"", $exp[0]);
- $name = explode("\"", $name[1]);
- $name = $name[0];
- $content = explode("</textarea", $exp[1]);
- $content = $content[0];
- $post[$name] = $content;
- }
- //select boxes
- $selectboxes = explode("<select ", $html);
- for($j = 1; $j < count($selectboxes); $j++) {
- $exp = explode(">", $selectboxes[$j], 2);
- $name = explode("name=\"", $exp[0]);
- $name = explode("\"", $name[1]);
- $name = $name[0];
- $content = explode("</select", $exp[1]);
- $content = $content[0];
- preg_match_all("<option ([^\>]*)>", $content, $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];
- }
- if(!$post[$name] || $cfields['selected']) {
- $post[$name] = $cfields['value'];
- }
- }
- }
- }
-
- public function editZNC($username, $password = NULL, $new_servers = NULL, $add_modules = NULL, $del_modules = NULL, $others = NULL) {
- $html = $this->connector->get("http://".$this->host.":".$this->port."/mods/webadmin/edituser?user=".$username);
- if(preg_match("/No such username/i", $html)) return false;
- $post = array();
- $post['loadmod'] = array();
- $this->parseHTMLFields($html, $post);
- if($password) {
- $post['password'] = $password;
- $post['password2'] = $password;
- }
- if($new_servers) {
- $post['servers'] = implode("\n", $new_servers);
- }
- foreach($add_modules as $name => $args) {
- $post['loadmod'][] = $name;
- if($args != "")
- $post['modargs_'.$name] = $args;
- }
- foreach($del_modules as $name => $args) {
- foreach($post['loadmod'] as $index => $mod) {
- if(strtolower($mod) == strtolower($name))
- unset($post['loadmod'][$index]);
- }
- }
- foreach($others as $name => $value) {
- $post[$name] = $value;
- }
- $html = $this->connector->post("http://".$this->host.":".$this->port."/mods/webadmin/edituser?user=".$username, $post);
- return !preg_match("/Invalid Submission/i", $html);
- }
-
- public function blockZNC($username, $block) {
- $html = $this->connector->get("http://".$this->host.":".$this->port."/mods/webadmin/edituser?user=".$username);
- if(preg_match("/No such username/i", $html)) return ERR_USER_NOT_FOUND;
- $post = array();
- $post['loadmod'] = array();
- $this->parseHTMLFields($html, $post);
- if(!$post['embed_blockuser_presented']) return ERR_MODULE_NOT_FOUND;
- if(!($post['embed_blockuser_block'] xor $block)) return ERR_OK;
- $post['embed_blockuser_block'] = ($block ? "1" : null);
- if(!$block) {
- $post['doconnect'] = 1;
- }
- $html = $this->connector->post("http://".$this->host.":".$this->port."/mods/webadmin/edituser?user=".$username, $post);
- return (preg_match("/Invalid Submission/i", $html) ? ERR_UNKNOWN : ERR_OK);
- }
-
- public function simulZNC($username, $raw, &$errmsg, $server = true) {
- $html = $this->connector->get("http://".$this->host.":".$this->port."/mods/send_raw/");
- if(preg_match("/Not Found/i", $html)) return ERR_MODULE_NOT_FOUND;
- $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;
- $post['send_to'] = ($server ? "server" : "client");
- $post['line'] = $raw;
- $this->connector->post("http://".$this->host.":".$this->port."/mods/send_raw/", $post);
- return ERR_OK;
- }
-
- public function addChan($username, $channel, $key = NULL, $buffer = NULL) {
- $html = $this->connector->get("http://".$this->host.":".$this->port."/mods/webadmin/addchan?user=".$username);
- if(preg_match("/No such username/i", $html)) return false;
- $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;
- $post['name'] = $channel;
- $exp = explode('name="key" value="', $html);
- $exp = explode('"', $exp[1]);
- $default_key = $exp[0];
- $post['key'] = ($key ? $key : $default_key);
- $exp = explode('name="buffercount" value="', $html);
- $exp = explode('"', $exp[1]);
- $default_buffer = $exp[0];
- $post['buffercount'] = ($buffer ? $buffer : $default_buffer);
- $post['save'] = 'true';
- $this->connector->post("http://".$this->host.":".$this->port."/mods/webadmin/addchan?user=".$username, $post);
- }
-