/** add registered user */ bool cRegList::AddRegUser(const string &nick, cConnDC *op, int cl, const char *password) { cRegUserInfo ui; if(FindRegInfo(ui, nick)) return false; // Do not register opchat or hub security if(toLower(nick) == toLower(mS->mC.opchat_name) || toLower(nick) == toLower(mS->mC.hub_security)) return false; ui.mNick = nick;//@todo nick2dbkey if ((cl>=1 && cl<=5) || cl==10 || cl==-1) ui.mClass = cl; else ui.mClass = 1; ui.mRegDate = cTime().Sec(); ui.mRegOp = (op && op->mpUser) ? op->mpUser->mNick : string("hub-security"); if(password) ui.SetPass(string(password),mS->mC.default_password_encryption); else ui.SetPass(string(),mS->mC.default_password_encryption); if(cl < 0) ui.mPwdChange = false; if(mCache.IsLoaded()) mCache.Add(nick);//@todo nick2dbkey SetBaseTo(&ui); return SavePK(); }
bool cPenaltyList::LoadTo(sPenalty &pen, const string &Nick) { if(mCache.IsLoaded() && !mCache.Find(Nick)) return false; SetBaseTo(&pen); pen.mNick = Nick; return LoadPK(); }
void cIPLog::GetLastLogin(const string &who, bool isNick, int limit, ostream &os) { string ip; if(isNick) os << autosprintf(_("Nick %s has lately been in the hub with the following IP"), who.c_str()) << "\n"; else os << autosprintf(_("IP %s has lately been in the hub with following nicknames"), who.c_str()) << "\n"; MakeSearchQuery(who, isNick, 1, limit); SetBaseTo(&mModel); os << "\n "; os << setw(25) << setiosflags(ios::left) << toUpper(_("Date")); os << (isNick ? "IP" : toUpper(_("Nickname"))) << "\n"; os << " " << string(25+20,'=') << endl; db_iterator it; for(it = db_begin(); it != db_end(); ++it) { cBanList::Num2Ip(mModel.mIP, ip); os << " " << setw(25) << setiosflags(ios::left) << cTime(mModel.mDate,0).AsDate(); os << (isNick ? ip : mModel.mNick) << endl; } mQuery.Clear(); }
int cMsgList::DeliverMessagesSinceSync(unsigned sync) { db_iterator it; int n = 0; cUser *user = NULL; nMySQL::cQuery DelQ(mQuery); SetBaseTo(&mModel); mQuery.Clear(); SelectFields(mQuery.OStream()); mQuery.OStream() << "WHERE date_sent >=" << sync; for(it = db_begin(); it != db_end(); ++it, ++n ) { if (!user || user->mNick != mModel.mReceiver) user = mServer->mUserList.GetUserByNick(mModel.mReceiver); if(user) { DeliverModelToUser(user); DelQ.Clear(); DelQ.OStream() << "DELETE FROM " << mMySQLTable.mName; WherePKey(DelQ.OStream()); DelQ.Query(); } } DelQ.Clear(); mQuery.Clear(); return n; }
int cMsgList::DeliverMessagesForUser(cUser *dest) { db_iterator it; int n = 0; long max_date = 0; mQuery.Clear(); SelectFields(mQuery.OStream()); mQuery.OStream() << "WHERE " << "receiver" << "='" ; WriteStringConstant(mQuery.OStream(),dest->mNick); mQuery.OStream()<< "'"; SetBaseTo(&mModel); for( it = db_begin(); it != db_end(); ++it, ++n ) { if (mModel.mDateSent > max_date) max_date = mModel.mDateSent; DeliverModelToUser(dest); } mQuery.Clear(); mQuery.OStream() << "DELETE FROM " << mMySQLTable.mName << " WHERE receiver = '" ; WriteStringConstant(mQuery.OStream(),dest->mNick); mQuery.OStream() << "' AND date_sent <= " << max_date; mQuery.Query(); return n; }
void cStats::AddFields() { mMySQLTable.mName = "pi_stats"; int i; ostringstream field_name; AddCol("realtime","int(11)","",false, mTime); AddPrimaryKey("realtime"); AddCol("uptime", "int(11)","",true,mUptimeSec); AddCol("users_total","int(11)","0",true, mS->mUserCountTot); for(i=0; i <= USER_ZONES; i++) { field_name.str(""); field_name << "users_zone" << i; AddCol(field_name.str().data(),"int(11)","0",true, mS->mUserCount[i]); } AddCol("upload_total","double","0",true, mUploadTotalBps); for(i=0; i <= USER_ZONES; i++) { field_name.str(""); field_name << "upload_zone" << i; AddCol (field_name.str().data(),"double","0",true, mUploadInZonesBps[i]); } AddCol("share_total_gb","int(11)","0",true, mShareTotalGB); AddCol("freq_search_active","double","0",true, mFreqSearchA); AddCol("freq_search_passive","double","0",true, mFreqSearchP); AddCol("freq_user_login","double","0",true, mFreqUserLogin); AddCol("freq_user_logout","double","0",true, mFreqUserLogout); mMySQLTable.mExtra ="PRIMARY KEY (realtime)"; SetBaseTo(this); }
void cIPLog::GetHistory(const string &who, bool isNick, int limit, ostream &os) { string ip; if(isNick) os << autosprintf(_("Last %d events of nick %s:"), limit, who.c_str()) << "\r\n"; else os << autosprintf(_("Last %d events of IP %s:"), limit, who.c_str()) << "\r\n"; MakeSearchQuery(who, isNick, -1, limit); SetBaseTo(&mModel); const char *Actions[]={_("connect"),_("login"),_("logout"),_("disconnect")}; const char *Infos[]={ "--", _("bad nick or nick temporarily banned"), _("used different nick in chat"), _("kicked"), _("redirected"), _("exit from the hub"), _("critical hub load"), _("timeout"), _("user did nothing for too long time"), _("hub full"), _("share limit"), _("no tag or not valid"), _("tag breaks hub rules"), _("wrong password"), _("error in login sequence"), _("syntax error in some messages"), _("invalid key") }; os << "\n "; os << setw(20) << setiosflags(ios::left) << toUpper(_("Date")); os << setw(20) << setiosflags(ios::left) << toUpper(_("Action")); os << setw(15) << setiosflags(ios::left) << (isNick ? "IP" : toUpper(_("Nickname"))); os << toUpper(_("Info")) << "\n"; os << " " << string(20+20+15+25,'=') << endl; db_iterator it; for(it = db_begin(); it != db_end(); ++it) { cBanList::Num2Ip(mModel.mIP, ip); os << " " << setw(20) << setiosflags(ios::left) << cTime(mModel.mDate,0).AsDate(); os << setw(20) << setiosflags(ios::left); if(mModel.mType < 4) os << Actions[mModel.mType]; else os << mModel.mType; os << setw(15) << setiosflags(ios::left) << (isNick ? ip : mModel.mNick.substr(0,14)); if(mModel.mInfo < 16) { if(strlen(Infos[mModel.mInfo]) > 0) os << Infos[mModel.mInfo]; } else os << mModel.mInfo; os << endl; } mQuery.Clear(); }
/** find nick in reglist if not foud return 0 else return 1 and fill in the reuserinfo parameter */ bool cRegList::FindRegInfo(cRegUserInfo &ui, const string &nick) { if(mCache.IsLoaded() && !mCache.Find(nick)) return false;//@todo nick2dbkey SetBaseTo(&ui); ui.mNick = nick;//@todo nick2dbkey return LoadPK(); }
void cRedirects::AddFields() { AddCol("address", "varchar(125)", "", false, mModel.mAddress); AddPrimaryKey("address"); AddCol("flag", "smallint(5)", "", false, mModel.mFlag); AddCol("enable", "tinyint(1)", "1", true, mModel.mEnable); mMySQLTable.mExtra = "PRIMARY KEY(address)"; SetBaseTo(&mModel); }
void cIPLog::AddFields() { // this is useful for the parent class mMySQLTable.mName = "pi_iplog"; AddCol("date","int(11)","",true, mModel.mDate ); AddCol("action","smallint(6)","0",true, mModel.mType); AddCol("ip", "bigint(20)","",true, mModel.mIP); AddCol("nick", "varchar(64)","",true, mModel.mNick); AddCol("info","int(11)","",true, mModel.mInfo); mMySQLTable.mExtra="id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY," "index ind_ip(ip), index ind_nick(nick)"; SetBaseTo(&mModel); }
void cTriggers::AddFields() { AddCol("command", "varchar(30)", "", false, mModel.mCommand); AddPrimaryKey("command"); AddCol("send_as", "varchar(128)", "", true, mModel.mSendAs); AddCol("def", "text", "", true, mModel.mDefinition); AddCol("descr", "text", "", true, mModel.mDescription); AddCol("min_class", "int(2)", "", true, mModel.mMinClass); AddCol("max_class", "int(2)", "10", true, mModel.mMaxClass); AddCol("flags", "int(2)", "0", true, mModel.mFlags); AddCol("seconds", "int(15)", "0", true, mModel.mSeconds); mMySQLTable.mExtra = "PRIMARY KEY(command)"; SetBaseTo(&mModel); }
/** log that user logged in */ bool cIPLog::Log(cConnDC *conn, int action, int info) { sUserStruct entry; entry.mIP = cBanList::Ip2Num(conn->AddrIP()); if(conn->mpUser != NULL) entry.mNick = conn->mpUser->mNick; else entry.mNick = ""; entry.mDate = cTime().Sec(); entry.mType = action; entry.mInfo = info; SetBaseTo(&entry); return SavePK(); }
int cMsgList::PrintSubjects(ostream &os, const string &nick, bool IsSender) { int n = 0; mQuery.Clear(); SelectFields(mQuery.OStream()); mQuery.OStream() << "WHERE " << (IsSender ? "sender" : "receiver") << "='"; WriteStringConstant(mQuery.OStream(), nick ); mQuery.OStream() << "'"; db_iterator it; SetBaseTo(&mModel); for(it = db_begin(); it != db_end(); ++it) { os << mModel.AsSubj() << endl; n++; } mQuery.Clear(); return 0; }
cPenaltyList::cPenaltyList(cMySQL &mysql) : cConfMySQL(mysql), mCache(mysql, "temp_rights", "nick") { mMySQLTable.mName = "temp_rights"; AddCol("nick", "varchar(64)", "", false, mModel.mNick); AddPrimaryKey("nick"); AddCol("op", "varchar(64)", "", true, mModel.mOpNick); AddCol("since", "int(11)", "", true, mModel.mSince); AddCol("st_chat", "int(11)", "1", true, mModel.mStartChat); AddCol("st_search", "int(11)", "1", true, mModel.mStartSearch); AddCol("st_ctm", "int(11)", "1", true, mModel.mStartCTM); AddCol("st_pm", "int(11)", "1", true, mModel.mStartPM); AddCol("st_kick", "int(11)", "1", true,mModel.mStopKick); AddCol("st_share0", "int(11)", "1", true, mModel.mStopShare0); AddCol("st_reg", "int(11)", "1", true, mModel.mStopReg); AddCol("st_opchat", "int(11)", "1", true, mModel.mStopOpchat); mMySQLTable.mExtra = "PRIMARY KEY(nick), "; mMySQLTable.mExtra = "INDEX creation_index(since)"; SetBaseTo(&mModel); }
cRegList::cRegList(cMySQL &mysql, cServerDC *server): cConfMySQL(mysql) ,mCache(mysql,"reglist", "nick", "reg_date"), mS (server) { //cTime now; SetClassName("nDC::cRegList"); mMySQLTable.mName="reglist"; ostringstream nickDomain; nickDomain << "varchar("; nickDomain << mS->mC.max_nick; nickDomain << ")"; AddCol("nick", nickDomain.str().c_str(), "", false, mModel.mNick); AddPrimaryKey("nick"); AddCol("class", "int(2)", "1", true, mModel.mClass); AddCol("class_protect", "int(2)", "0", true, mModel.mClassProtect); AddCol("class_hidekick", "int(2)", "0", true, mModel.mClassHideKick); AddCol("hide_kick", "tinyint(1)", "0", true, mModel.mHideKick); AddCol("hide_keys", "tinyint(1)", "0", true, mModel.mHideKeys); AddCol("hide_share", "tinyint(1)", "0", true, mModel.mHideShare); AddCol("hide_ctmmsg", "tinyint(1)", "0", true, mModel.mHideCtmMsg); AddCol("reg_date", "int(11)", "", true, mModel.mRegDate); AddCol("reg_op", "varchar(64)", "", true, mModel.mRegOp); AddCol("pwd_change", "tinyint(1)", "1", true, mModel.mPwdChange); AddCol("pwd_crypt", "tinyint(1)", "1", true, mModel.mPWCrypt); AddCol("login_pwd", "varchar(60)", "", true, mModel.mPasswd); AddCol("login_last", "int(11)", "0", true, mModel.mLoginLast); AddCol("logout_last", "int(11)", "0", true, mModel.mLogoutLast); AddCol("login_cnt", "int(11)", "0", true, mModel.mLoginCount); AddCol("login_ip", "varchar(16)", "", true, mModel.mLoginIP); AddCol("error_last", "int(11)", "", true, mModel.mErrorLast); AddCol("error_cnt", "int(11)", "0", true, mModel.mErrorCount); AddCol("error_ip", "varchar(16)", "", true, mModel.mErrorIP); AddCol("enabled", "tinyint(1)", "1", true, mModel.mEnabled); AddCol("email", "varchar(60)", "", true, mModel.mEmail); AddCol("note_op", "text", "", true, mModel.mNoteOp); AddCol("note_usr", "text", "", true, mModel.mNoteUsr); AddCol("auth_ip", "varchar(15)", "", true, mModel.mAuthIP); AddCol("alternate_ip", "varchar(16)", "", true, mModel.mAlternateIP); mMySQLTable.mExtra = "PRIMARY KEY(nick), "; mMySQLTable.mExtra+= "INDEX login_index (login_last), "; mMySQLTable.mExtra+= "INDEX logout_index (logout_last)"; SetBaseTo(&mModel); }
void cMsgList::AddFields() { // this is useful for the parent class mMySQLTable.mName = "pi_messages"; // add every field you want to be able to load simply // add also primary key fields // the string constans here must correspont to field names AddCol("sender","varchar(32)","",false,mModel.mSender); AddPrimaryKey("sender"); AddCol("date_sent","int(11)","",false, mModel.mDateSent); AddPrimaryKey("date_sent"); AddCol("sender_ip","varchar(15)","",true, mModel.mSenderIP); AddCol("receiver","varchar(32)","",false, mModel.mReceiver ); AddCol("date_expires","int(11)","0",true, mModel.mDateExpires ); AddCol("subject","varchar(128)","",true, mModel.mSubject ); AddCol("body","text","",true, mModel.mBody ); mMySQLTable.mExtra="PRIMARY KEY (sender, date_sent)"; SetBaseTo(&mModel); }
bool cPenaltyList::RemPenalty(sPenalty &penal) { SetBaseTo(&mModel); mModel.mNick = penal.mNick; mModel.mOpNick = penal.mOpNick; time_t Now = cTime().Sec(); if(LoadPK()) { if(penal.mStartChat < Now) mModel.mStartChat = Now; if(penal.mStartCTM < Now) mModel.mStartCTM = Now; if(penal.mStartPM < Now) mModel.mStartPM = Now; if(penal.mStartSearch < Now) mModel.mStartSearch = Now; if(penal.mStopKick < Now) mModel.mStopKick = Now; if(penal.mStopShare0 < Now) mModel.mStopShare0 = Now; if(penal.mStopReg < Now) mModel.mStopReg = Now; if(penal.mStopOpchat < Now) mModel.mStopOpchat = Now; } if(mModel.ToKeepIt()) return SavePK(); else DeletePK(); return true; }
bool cMsgList::AddMessage( sMessage &msg ) { if (mCache.IsLoaded()) mCache.Add(msg.mReceiver); SetBaseTo(&msg); return SavePK(); }
/** No descriptions */ bool cRegList::SetVar(const string &nick, string &field, string &value) { SetBaseTo(&mModel); mModel.mNick = nick; //@todo nick2dbkey return UpdatePKVar(field.c_str(), value); }