X-Git-Url: http://git.pk910.de/?p=ZNCAdmin.git;a=blobdiff_plain;f=zncadmin.php;h=11bf566f1f7d2a7070173612883a4f51df5bc9ea;hp=78937925953b5c40ba70e4cfc35f10bebecceef9;hb=HEAD;hpb=6cd66f219f6024ce6400f25b7b0165d37449e49f diff --git a/zncadmin.php b/zncadmin.php index 7893792..11bf566 100644 --- a/zncadmin.php +++ b/zncadmin.php @@ -41,12 +41,18 @@ switch(strtolower($argv[1])) { case "add": zncadmin_add(); break; + case "addonce": + zncadmin_addOnce(); + break; case "del": zncadmin_del(); break; case "search": zncadmin_search(); break; + case "whois": + zncadmin_whois(); + break; case "seen": zncadmin_seen(); break; @@ -159,10 +165,10 @@ function zncadmin_search() { } $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; @@ -209,7 +215,13 @@ function zncadmin_search() { } 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++; } } @@ -224,7 +236,7 @@ function zncadmin_search() { } } -//SUBCOMMAND: search +//SUBCOMMAND: seen function zncadmin_seen() { global $argv, $zncservers; $time = $argv[2]; @@ -247,7 +259,7 @@ function zncadmin_seen() { $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))) { @@ -277,7 +289,7 @@ function zncadmin_del() { 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) { @@ -316,7 +328,11 @@ function zncadmin_add() { 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; @@ -353,18 +369,103 @@ function zncadmin_add() { $settings['nick'] = $argv[2]; $settings['altnick'] = $argv[2]."`"; $settings['ident'] = $username; - $ret = $addserv['conn']->addZNC($argv[2], $password, $settings, $add_settings['servers'], $add_settings['modules'], $add_settings['other']); + $ret = $addserv['conn']->addZNC($argv[2], $password, $settings, $add_settings['servers'], $add_settings['modules'], $add_settings['netmodules'], $add_settings['other']); if($ret) { echo "Added user ".$argv[2]." to Server ".$addserv['name'].".\n"; 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."); +} + + +function zncadmin_addOnce() { + global $argv, $zncservers, $add_settings, $force; + $username = strtolower($argv[2]); + if(!$username) { + error("missing username"); + return; + } + $addserv = array(); + $priority = 1; + $existing = false; + foreach($zncservers as $zncserver) { + if($argv[3] && (strtolower($argv[3]) != strtolower($zncserver['name']))) continue; + if(!$argv[3] && $zncserver['priority'] < $priority) continue; + 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(); + foreach($zncserver['users'] as $user) { + if(strtolower($user['user']) == $username) { + $existing = true; + break; + } + } + if($existing) + break; + if(count($zncserver['users']) < $zncserver['maxznc']) { + if($zncserver['priority'] > $priority) { + $priority = $zncserver['priority']; + $addserv = array(); + } + $addserv[] = $zncserver; + } + } + if($existing) { + error("A User with username \002".$username."\002 already exists."); + return; + } + if(count($addserv) > 1) { + //select server with lowest user count + $usercount = count($addserv[0]['users']); + $selected = 0; + for($i = 1; $i < count($addserv); $i++) { + if(count($addserv[$i]['users']) < $usercount) { + $usercount = count($addserv[$i]['users']); + $selected = $i; + } + } + $addserv = $addserv[$selected]; + } else if(count($addserv) == 0) { + error("Couldn't find a server the user could be added to."); + return; + } else { + $addserv = $addserv[0]; + } + $password = generate_password(); + $settings = array(); + $settings['nick'] = $argv[2]; + $settings['altnick'] = $argv[2]."`"; + $settings['ident'] = $username; + $ret = $addserv['conn']->addZNC($argv[2], $password, $settings, $add_settings['servers'], $add_settings['modules'], $add_settings['netmodules'], $add_settings['other']); + if($ret) { + echo "Added user ".$argv[2]." to Server ".$addserv['name'].".\n"; + 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 ".$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"; + foreach($add_settings["channel"] AS $channel) { + $addserv['conn']->addChan($argv[2], $channel); + } } else error("Error while adding user."); } @@ -381,7 +482,7 @@ function zncadmin_resetpass() { 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) { @@ -439,7 +540,7 @@ function zncadmin_simul() { 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) { @@ -469,6 +570,114 @@ function zncadmin_simul() { } } +//SUBCOMMAND: whois +function zncadmin_whois() { + global $argv, $zncservers, $force; + $username = strtolower($argv[2]); + $server = strtolower($argv[3]); + if(!$username) { + error("missing username"); + return; + } + if($server) { + $found = false; + foreach($zncservers as $zncserver) { + if(strtolower($server) == strtolower($zncserver['name'])) { + $found = true; + break; + } + } + if(!$found) { + $server = null; + } + } + $foundusers = 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) { + $foundusers[] = array("server" => $zncserver, "user" => $user); + } + } + } + if(count($foundusers) > 1) { + error($argv[2]." exists on multiple servers! please add the server name the user is on."); + echo"Found User on following Servers:\n"; + foreach($foundusers as $server) { + echo "\002".$server['server']['name']."\002 Server: ".$server['user']['server']." Nick: ".$server['user']['nick']." Clients: ".$server['user']['clients']."\n"; + } + } else if(count($foundusers) == 0) { + error("Couldn't find an user called \002".$argv[2]."\002."); + } else if($foundusers[0]['server']['protected'] && !$force) { + error("Access denied\n"); + } else { + $founduser = $foundusers[0]; + $info = $founduser['server']['conn']->getUserInfo($founduser['user']['user'], true); + if(!$info) { + error("failed getting infos for user ".$founduser['user']['user']." on ".$founduser['server']['name']); + } else { + + echo "User: ".$founduser['user']['user']." (".$founduser['server']['name'].") || Conected to IRC: ".$founduser['user']['server']." || Conected to ZNC: ".$founduser['user']['clients']."\n"; + + $modulesstr = "User Modules: "; + foreach($info['loadmod'] as $module) { + if(strlen($module) == 0) continue; + if($modulesstr == "") + $modulesstr = " "; + $modulesstr .= $module." "; + if(strlen($modulesstr) >= 170) { + echo $modulesstr."\n"; + $modulesstr = ""; + } + } + if($modulesstr != "") + echo $modulesstr."\n"; + + foreach($info['networks'] as $network) { + echo "Network \002".$network['name']."\002\n"; + echo " Nickname: ".$network['nick']."\n"; + $servers = str_replace(array("\r"), array(""), $network['settings']['servers']); + echo " Server:\n"; + foreach(explode("\n", $servers) as $server) { + if(strlen($server) == 0) continue; + echo " ".$server."\n"; + } + $channelstr = " Channel: "; + foreach($network['settings']['channel'] as $chan) { + if(strlen($chan) == 0) continue; + if($channelstr == "") + $channelstr = " "; + $channelstr .= $chan." "; + if(strlen($channelstr) >= 170) { + echo $channelstr."\n"; + $channelstr = ""; + } + } + if($channelstr != "") + echo $channelstr."\n"; + + $modulesstr = " Modules: "; + foreach($network['settings']['loadmod'] as $module) { + if(strlen($module) == 0) continue; + if($modulesstr == "") + $modulesstr = " "; + $modulesstr .= $module." "; + if(strlen($modulesstr) >= 170) { + echo $modulesstr."\n"; + $modulesstr = ""; + } + } + if($modulesstr != "") + echo $modulesstr."\n"; + } + + } + } +} + //SUBCOMMAND: block function zncadmin_block() { global $argv, $zncservers, $force; @@ -482,7 +691,7 @@ function zncadmin_block() { 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) { @@ -525,7 +734,7 @@ function zncadmin_unblock() { 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) { @@ -558,21 +767,21 @@ function zncadmin_unblock() { //SUBCOMMAND: stats function zncadmin_stats() { global $argv, $zncservers; - $table = new Table(5); - $table->add("Server", "Port / SSL Port", "Total ZNC's", "Connected (IRC)", "Online (User)"); + $table = new Table(6); + $table->add("Server", "Port / SSL Port", "Total ZNC's", "Connected (IRC)", "Online (User)", "Protected?"); $count = 0; foreach($zncservers as $zncserver) { $total = 0; $connected = 0; $online = 0; - $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($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); + $table->add($zncserver['name'], $zncserver['port'].($zncserver['sslport'] ? "/".$zncserver['sslport'] : ""), $total.($zncserver['maxznc'] ? "/".$zncserver['maxznc'] : ""), $connected, $online, ($zncserver['protected'] === true ? "X" : "")); $count++; } if($count) {