converted hardcoded channel to dynamic coded
[ZNCAdmin.git] / zncadmin.php
index 669fca5a00e73976a87bca76aa276309e819a232..3ca2fa8ff579306fbd20e08ef5f8231d6d51eb2e 100644 (file)
@@ -56,6 +56,15 @@ switch(strtolower($argv[1])) {
     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;
@@ -150,7 +159,7 @@ 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']);
@@ -200,7 +209,7 @@ 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']);
+                $table->add($zncserver['name'], $user['user'], $user['clients'], $user['server']);
                 $count++;
             }
         }
@@ -307,6 +316,10 @@ function zncadmin_add() {
     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']);
         $zncserver['conn']->login($zncserver['auser'], $zncserver['apass']);
         $zncserver['users'] = $zncserver['conn']->getUserList();
@@ -350,12 +363,15 @@ function zncadmin_add() {
         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 KryptonZNC\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.");
 }
@@ -450,9 +466,128 @@ function zncadmin_simul() {
         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']);
+        $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']);
+        $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;
+    $table = new Table(5);
+    $table->add("Server", "Port / SSL Port", "Total ZNC's", "Connected (IRC)", "Online (User)");
+    $count = 0;
+    foreach($zncservers as $zncserver) {
+        $total = 0;
+        $connected = 0;
+        $online = 0;
+        $zncserver['conn'] = new ZNCServer($zncserver['host'], $zncserver['port']);
+        $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);
+        $count++;
+    }
+    if($count) {
+        foreach($table->end() as $line) {
+            echo$line."\n";
+        }
+    } else {
+        echo "No Servers configured...\n";
     }
 }