added addOnce command master
authorpk910 <philipp@zoelle1.de>
Wed, 27 May 2015 16:33:42 +0000 (18:33 +0200)
committerpk910 <philipp@zoelle1.de>
Wed, 27 May 2015 16:38:46 +0000 (18:38 +0200)
zncadmin.php

index f5397ffb62838e5cfa46eaf3d3f2795cf0b45ea4..11bf566f1f7d2a7070173612883a4f51df5bc9ea 100644 (file)
@@ -41,6 +41,9 @@ switch(strtolower($argv[1])) {
     case "add":
         zncadmin_add();
         break;
+       case "addonce":
+               zncadmin_addOnce();
+               break;
     case "del":
         zncadmin_del();
         break;
@@ -385,6 +388,88 @@ function zncadmin_add() {
         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.");
+}
+
 //SUBCOMMAND: resetpass
 function zncadmin_resetpass() {
     global $argv, $zncservers, $force;