<?php
/* czncadmin.php - main script - ZNCAdmin
* Copyright (C) 2011-2012 Philipp Kreil (pk910)
- *
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
error_reporting(E_ALL & ~E_NOTICE);
case "search":
zncadmin_search();
break;
- case "seen":
+ case "seen":
zncadmin_seen();
break;
case "resetpass":
case "simul":
zncadmin_simul();
break;
+ case "block":
+ zncadmin_block();
+ break;
+ case "unblock":
+ zncadmin_unblock();
+ break;
+ case "stats":
+ zncadmin_stats();
+ break;
default:
error("invalid subcommand '".$argv[1]."'");
break;
foreach($in as $item) {
$out[] = "\\".$item;
}
- if($wildcards) {
+ if($wildcards) {
array_push($in,"*");
array_push($out,"(.*)");
}
}
$mask = preg_prepare($mask);
$table = new Table(5);
- $table->add("Server", "User", "Clients", "Server", "Nick");
+ $table->add("Server", "User", "Clients", "Server", "");
$count = 0;
foreach($zncservers as $zncserver) {
- $zncserver['conn'] = new ZNCServer($zncserver['host'], $zncserver['port']);
+ $zncserver['conn'] = new ZNCServer($zncserver['host'], $zncserver['port'], (isset($zncserver['version']) ? $zncserver['version'] : NULL));
$zncserver['conn']->login($zncserver['auser'], $zncserver['apass']);
foreach($zncserver['conn']->getUserList() as $user) {
$skip = false;
$skip = (preg_match("#^".preg_prepare($flagval)."$#i", $zncserver['name']) != $positive);
break;
default:
-
+
break;
}
if($skip)
}
if($skip) continue;
if(preg_match("#^".$mask."$#i", $user['user'])) {
- $table->add($zncserver['name'], $user['user'], $user['clients'], $user['server'], $user['nick']);
+ $extra = "";
+ if(isset($user['nick'])) {
+ if($extra != "")
+ $extra .= ", ";
+ $extra .= "Nick: ".$user['nick'];
+ }
+ $table->add($zncserver['name'], $user['user'], $user['clients'], $user['server'], $extra);
$count++;
}
}
//SUBCOMMAND: search
function zncadmin_seen() {
global $argv, $zncservers;
- $time = $argv[2];
- $over_time = true;
- if($time[0] == '>' || $time[0] == '<') {
- if($time[0] == '<') $over_time = false;
- $time = substr($time, 1);
- }
- $time = time() - str2time($time);
+ $time = $argv[2];
+ $over_time = true;
+ if($time[0] == '>' || $time[0] == '<') {
+ if($time[0] == '<') $over_time = false;
+ $time = substr($time, 1);
+ }
+ $time = time() - str2time($time);
$mask = $argv[3];
if(!$time) {
error("missing time parameter");
$table->add("Server", "User", "Seen", "Info");
$found = false;
foreach($zncservers as $zncserver) {
- $zncserver['conn'] = new ZNCServer($zncserver['host'], $zncserver['port']);
+ $zncserver['conn'] = new ZNCServer($zncserver['host'], $zncserver['port'], (isset($zncserver['version']) ? $zncserver['version'] : NULL));
$zncserver['conn']->login($zncserver['auser'], $zncserver['apass']);
foreach($zncserver['conn']->getSeenList() as $user) {
if(preg_match("#^".$mask."$#i", $user['user']) && (($over_time && $user['seen_unix'] < $time) || (!$over_time && $user['seen_unix'] > $time))) {
foreach($zncservers as $zncserver) {
if($argv[3] && (strtolower($argv[3]) != strtolower($zncserver['name']))) continue;
if($username == strtolower($zncserver['auser'])) continue;
- $zncserver['conn'] = new ZNCServer($zncserver['host'], $zncserver['port']);
+ $zncserver['conn'] = new ZNCServer($zncserver['host'], $zncserver['port'], (isset($zncserver['version']) ? $zncserver['version'] : NULL));
$zncserver['conn']->login($zncserver['auser'], $zncserver['apass']);
foreach($zncserver['conn']->getUserList() as $user) {
if(strtolower($user['user']) == $username) {
foreach($zncservers as $zncserver) {
if($argv[3] && (strtolower($argv[3]) != strtolower($zncserver['name']))) continue;
if(!$argv[3] && $zncserver['priority'] < $priority) continue;
- $zncserver['conn'] = new ZNCServer($zncserver['host'], $zncserver['port']);
+ if($zncserver['protected'] === true && !$force) {
+ error("Access denied\n");
+ return;
+ }
+ $zncserver['conn'] = new ZNCServer($zncserver['host'], $zncserver['port'], (isset($zncserver['version']) ? $zncserver['version'] : NULL));
$zncserver['conn']->login($zncserver['auser'], $zncserver['apass']);
$zncserver['users'] = $zncserver['conn']->getUserList();
$existing = false;
echo " Server Host: ".$addserv['public']." Port: ".$addserv['port']." SSL Port: ".$addserv['sslport']."\n";
echo " Password: ".$password."\n";
echo "[mIRC]\n";
- echo " /server -a ".$addserv['public']." -p ".$addserv['port']." -g KryptonZNC -w ".$argv[2].":".$password." -d KryptonZNC\n";
- echo " /AS addmask *@*.free-bnc.de\n";
- echo " /AS addmask *@*.krypton-bouncer.de\n";
- echo " /server -m KryptonZNC\n";
+ echo " /server -a ".$addserv['public']." -p ".$addserv['port']." -g ".$add_settings['mirccmds']['groupname']." -w ".$argv[2].":".$password." -d ".$add_settings['mirccmds']['groupname']."\n";
+ foreach($add_settings['mirccmds']['hosts'] AS $host) {
+ echo " /AS addmask *@*.".$host."\n";
+ }
+ echo " /server -m ".$add_settings['mirccmds']['groupname']."\n";
echo"/log\n";
- $addserv['conn']->addChan($argv[2], "#Krypton");
+ foreach($add_settings["channel"] AS $channel) {
+ $addserv['conn']->addChan($argv[2], $channel);
+ }
} else
error("Error while adding user.");
}
foreach($zncservers as $zncserver) {
if($argv[3] && (strtolower($argv[3]) != strtolower($zncserver['name']))) continue;
if($username == strtolower($zncserver['auser'])) continue;
- $zncserver['conn'] = new ZNCServer($zncserver['host'], $zncserver['port']);
+ $zncserver['conn'] = new ZNCServer($zncserver['host'], $zncserver['port'], (isset($zncserver['version']) ? $zncserver['version'] : NULL));
$zncserver['conn']->login($zncserver['auser'], $zncserver['apass']);
foreach($zncserver['conn']->getUserList() as $user) {
if(strtolower($user['user']) == $username) {
foreach($zncservers as $zncserver) {
if($server && (strtolower($server) != strtolower($zncserver['name']))) continue;
if($username == strtolower($zncserver['auser'])) continue;
- $zncserver['conn'] = new ZNCServer($zncserver['host'], $zncserver['port']);
+ $zncserver['conn'] = new ZNCServer($zncserver['host'], $zncserver['port'], (isset($zncserver['version']) ? $zncserver['version'] : NULL));
$zncserver['conn']->login($zncserver['auser'], $zncserver['apass']);
foreach($zncserver['conn']->getUserList() as $user) {
if(strtolower($user['user']) == $username) {
error("Access denied\n");
} else {
$deluser = $delusers[0];
- $deluser['server']['conn']->simulZNC($deluser['user']['user'], $raw);
- echo "Simuled \002".$deluser['user']['user']."\002 on Server ".$deluser['server']['name'].": ".$raw."\n";
- echo"/log\n";
+ $ret = $deluser['server']['conn']->simulZNC($deluser['user']['user'], $raw);
+ if($ret == ERR_MODULE_NOT_FOUND) {
+ error("send_raw module is not installed or not activated for user ".$deluser['server']['auser']." on ".$deluser['server']['name']);
+ } else {
+ echo "Simuled \002".$deluser['user']['user']."\002 on Server ".$deluser['server']['name'].": ".$raw."\n";
+ echo"/log\n";
+ }
+ }
+}
+
+//SUBCOMMAND: block
+function zncadmin_block() {
+ global $argv, $zncservers, $force;
+ $username = strtolower($argv[2]);
+ $server = strtolower($argv[3]);
+ if(!$username) {
+ error("missing username");
+ return;
+ }
+ $delusers = array();
+ foreach($zncservers as $zncserver) {
+ if($server && (strtolower($server) != strtolower($zncserver['name']))) continue;
+ if($username == strtolower($zncserver['auser'])) continue;
+ $zncserver['conn'] = new ZNCServer($zncserver['host'], $zncserver['port'], (isset($zncserver['version']) ? $zncserver['version'] : NULL));
+ $zncserver['conn']->login($zncserver['auser'], $zncserver['apass']);
+ foreach($zncserver['conn']->getUserList() as $user) {
+ if(strtolower($user['user']) == $username) {
+ $delusers[] = array("server" => $zncserver, "user" => $user);
+ }
+ }
+ }
+ if(count($delusers) > 1) {
+ error($argv[2]." exists on multiple servers! please add the server name the user should be blocked on.");
+ echo"Found User on following Servers:\n";
+ foreach($delusers as $server) {
+ echo "\002".$server['server']['name']."\002 Server: ".$server['user']['server']." Nick: ".$server['user']['nick']." Clients: ".$server['user']['clients']."\n";
+ }
+ } else if(count($delusers) == 0) {
+ error("Couldn't find an user called \002".$argv[2]."\002.");
+ } else if($delusers[0]['server']['protected'] && !$force) {
+ error("Access denied\n");
+ } else {
+ $deluser = $delusers[0];
+ $ret = $deluser['server']['conn']->blockZNC($deluser['user']['user'], true);
+ if($ret == ERR_MODULE_NOT_FOUND) {
+ error("blockuser module is not installed or not activated on ".$deluser['server']['name']);
+ } else {
+ echo "Blocked \002".$deluser['user']['user']."\002 on Server ".$deluser['server']['name'].".\n";
+ echo"/log\n";
+ }
+ }
+}
+
+//SUBCOMMAND: unblock
+function zncadmin_unblock() {
+ global $argv, $zncservers, $force;
+ $username = strtolower($argv[2]);
+ $server = strtolower($argv[3]);
+ if(!$username) {
+ error("missing username");
+ return;
+ }
+ $delusers = array();
+ foreach($zncservers as $zncserver) {
+ if($server && (strtolower($server) != strtolower($zncserver['name']))) continue;
+ if($username == strtolower($zncserver['auser'])) continue;
+ $zncserver['conn'] = new ZNCServer($zncserver['host'], $zncserver['port'], (isset($zncserver['version']) ? $zncserver['version'] : NULL));
+ $zncserver['conn']->login($zncserver['auser'], $zncserver['apass']);
+ foreach($zncserver['conn']->getUserList() as $user) {
+ if(strtolower($user['user']) == $username) {
+ $delusers[] = array("server" => $zncserver, "user" => $user);
+ }
+ }
+ }
+ if(count($delusers) > 1) {
+ error($argv[2]." exists on multiple servers! please add the server name the user should be unblocked on.");
+ echo"Found User on following Servers:\n";
+ foreach($delusers as $server) {
+ echo "\002".$server['server']['name']."\002 Server: ".$server['user']['server']." Nick: ".$server['user']['nick']." Clients: ".$server['user']['clients']."\n";
+ }
+ } else if(count($delusers) == 0) {
+ error("Couldn't find an user called \002".$argv[2]."\002.");
+ } else if($delusers[0]['server']['protected'] && !$force) {
+ error("Access denied\n");
+ } else {
+ $deluser = $delusers[0];
+ $ret = $deluser['server']['conn']->blockZNC($deluser['user']['user'], false);
+ if($ret == ERR_MODULE_NOT_FOUND) {
+ error("blockuser module is not installed or not activated on ".$deluser['server']['name']);
+ } else {
+ echo "Unblocked \002".$deluser['user']['user']."\002 on Server ".$deluser['server']['name'].".\n";
+ echo"/log\n";
+ }
+ }
+}
+
+//SUBCOMMAND: stats
+function zncadmin_stats() {
+ global $argv, $zncservers, $force;
+ $server = $argv[2];
+ $table = new Table(6);
+ $table->add("Server", "Port / SSL Port", "Total ZNC's", "Connected (IRC)", "Online (User)", "Protected?");
+ $count = 0;
+ foreach($zncservers as $zncserver) {
+ if($server > 0 && $zncserver['name'] != $server) continue;
+ if($server > 0 && $zncserver['name'] == $server && $zncserver['protected'] === true && !$force) {
+ error("Access denied\n");
+ return;
+ } elseif($server > 0 && $zncserver['name'] == $server && (($zncserver['protected'] === true && $force) || $zncserver['protected'] === false)) {
+ $zncserver['conn'] = new ZNCServer($zncserver['host'], $zncserver['port'], (isset($zncserver['version']) ? $zncserver['version'] : NULL));
+ $zncserver['conn']->login($zncserver['auser'], $zncserver['apass']);
+ $trafficStats = $zncserver['conn']->getTrafficStats();
+ } else {
+ echo "No Servers configured...\n";
+ return;
+ }
+
+ $total = 0;
+ $connected = 0;
+ $online = 0;
+ $zncserver['conn'] = new ZNCServer($zncserver['host'], $zncserver['port'], (isset($zncserver['version']) ? $zncserver['version'] : NULL));
+ $zncserver['conn']->login($zncserver['auser'], $zncserver['apass']);
+ foreach($zncserver['conn']->getUserList() as $user) {
+ if($user['server'] != "-N/A-") $connected++;
+ if($user['clients'] > 0) $online++;
+ $total++;
+ }
+ $table->add($zncserver['name'], $zncserver['port'].($zncserver['sslport'] ? "/".$zncserver['sslport'] : ""), $total.($zncserver['maxznc'] ? "/".$zncserver['maxznc'] : ""), $connected, $online, ($zncserver['protected'] === true ? "X" : ""));
+ $count++;
+ }
+ if($count) {
+ foreach($table->end() as $line) {
+ echo$line."\n";
+ }
+ } else {
+ echo "No Servers configured...\n";
}
}