case "add":
zncadmin_add();
break;
+ case "addonce":
+ zncadmin_addOnce();
+ break;
case "del":
zncadmin_del();
break;
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;