Beispiel #1
0
/** 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();
}
Beispiel #2
0
bool cPenaltyList::LoadTo(sPenalty &pen, const string &Nick)
{
	if(mCache.IsLoaded() && !mCache.Find(Nick)) return false;
	SetBaseTo(&pen);
	pen.mNick = Nick;
	return LoadPK();
}
Beispiel #3
0
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;
}
Beispiel #6
0
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);
}
Beispiel #7
0
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();
}
Beispiel #8
0
/** 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();
}
Beispiel #9
0
	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);
	}
Beispiel #10
0
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);
}
Beispiel #11
0
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);
}
Beispiel #12
0
/** 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();
}
Beispiel #13
0
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;
}
Beispiel #14
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);
}
Beispiel #15
0
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);
}
Beispiel #16
0
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);
}
Beispiel #17
0
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;
}
Beispiel #18
0
bool cMsgList::AddMessage( sMessage &msg )
{
	if (mCache.IsLoaded()) mCache.Add(msg.mReceiver);
	SetBaseTo(&msg);
	return SavePK();
}
Beispiel #19
0
/** 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);
}