public static function drop_command($nick, $ircdata = array()) { $unick = core::get_nick(&$ircdata, 0); $password = $ircdata[1]; // get the nick. if (trim($unick) == '' || trim($password) == '' && (!core::$nicks[$nick]['ircop'] || services::user_exists($nick, true, array('display', 'identified')) === false)) { services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INVALID_SYNTAX_RE, array('help' => 'DROP')); return false; } // invalid syntax if (services::is_root($unick) && !services::is_root($nick)) { services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_ACCESS_DENIED); return false; } // is a non-root trying to drop a root? if ($user = services::user_exists($unick, false, array('id', 'display', 'pass', 'salt', 'suspended'))) { if ($user->suspended == 1) { services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_SUSPEND_1, array('nick' => $user->display)); return false; } // are they suspended? if ($user->pass == sha1($password . $user->salt) || core::$nicks[$nick]['ircop'] && services::user_exists($nick, true, array('display', 'identified')) !== false) { database::delete('users', array('display', '=', $user->display)); database::delete('users_flags', array('nickname', '=', $user->display)); // delete the users record database::delete('chans_levels', array('target', '=', $user->display)); // also delete this users channel access. core::alog(core::$config->nickserv->nick . ': ' . $user->display . ' has been dropped by ' . core::get_full_hostname($nick)); // logchan it core::alog('drop_command(): ' . $user->display . ' has been dropped by ' . core::get_full_hostname($nick), 'BASIC'); // log what we need to log. if (isset(core::$nicks[$user->display])) { ircd::on_user_logout($nick->display); } // if the nick is being used unregister it, even though it shouldn't be? services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_NICK_DROPPED, array('nick' => $user->display)); // let the nick know the account has been dropped. } else { services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INVALID_PASSWORD); // password isn't correct } } else { services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_ISNT_REGISTERED, array('nick' => $unick)); return false; // doesn't even exist.. } }
public static function logout_command($nick, $ircdata = array()) { // no parameter commands ftw. if ($user = services::user_exists($nick, false, array('display', 'id', 'identified', 'vhost'))) { if ($user->identified == 1) { ircd::on_user_logout($nick); // here we set unregistered mode database::update('users', array('identified' => 0, 'last_timestamp' => core::$network_time), array('display', '=', $nick)); // unidentify them services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_LOGGED_OUT); // let them know core::alog(core::$config->nickserv->nick . ': ' . core::get_full_hostname($nick) . ' logged out of ' . core::$nicks[$nick]['nick']); // and log it. } else { services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_NOT_IDENTIFIED); // not even identified } } else { services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_UNREGISTERED); // unregistered nick name } }
public static function _registered_nick($nick, $user) { database::update('users', array('identified' => 0), array('display', '=', $nick)); // set them to identified 0, this might fix that long term bug. ircd::on_user_logout($nick); // they shouldn't really have registered mode if (is_array(nickserv::$help->NS_REGISTERED_NICK)) { foreach (nickserv::$help->NS_REGISTERED_NICK as $line) { services::communicate(core::$config->nickserv->nick, $nick, $line); } } else { services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_REGISTERED_NICK); } // this is just a crappy function, basically just parses the NS_REGISTERED thing // we check for arrays and single lines, even though the default is array // someone might have changed it. if (nickserv::check_flags($nick, array('S')) && isset(modules::$list['ns_flags'])) { timer::add(array('ns_identify', 'secured_callback', array($nick)), core::$config->nickserv->secure_time, 1); services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_SECURED_NICK, array('seconds' => core::$config->nickserv->secure_time)); } // if the nickname has secure enabled, we let them know that we're watching them :o }
public static function check_expire() { if (core::$config->nickserv->expire == 0) { return false; } // skip nicknames if config is set to no expire. $expiry_time = core::$config->nickserv->expire * 86400; $check_time = core::$network_time - $expiry_time; // set up our times. $nick_q = database::select('users', array('id', 'display', 'last_timestamp'), array('last_timestamp', '!=', '0', 'AND', 'last_timestamp', '<', $check_time)); if (database::num_rows($nick_q) == 0) { return false; } // no expiring nicknames while ($nick = database::fetch($nick_q)) { // Mikeh gets most of the credit for helping // me code this function database::delete('users', array('display', '=', $nick->display)); database::delete('users_flags', array('nickname', '=', $user->display)); // delete the users record database::delete('chans_levels', array('target', '=', $nick->display)); // also delete this users channel access. core::alog(core::$config->nickserv->nick . ': ' . $nick->display . ' has expired. Last used on ' . date('F j, Y, g:i a', $nick->last_timestamp)); // logchan it if (isset(core::$nicks[$nick->display])) { ircd::on_user_logout($nick->display); } // if the nick is being used unregister it, even though it shouldn't be, just to be safe. } // loop through all expiring nicks. }