#include <ctime>
#include <string>
#include <set>
+#include <map>
#include <sstream>
#include <iostream>
#include "stg/logger.h"
#include "stg/locker.h"
#include "stg/scriptexecuter.h"
+#include "stg/common.h"
#include "store.h"
#include "admin.h"
#include "noncopyable.h"
extern volatile time_t stgTime;
-
+//-----------------------------------------------------------------------------
+class USER_PROPERTY_BASE {
+public:
+ virtual std::string ToString() const = 0;
+};
//-----------------------------------------------------------------------------
template<typename varT>
-class USER_PROPERTY {
+class USER_PROPERTY : public USER_PROPERTY_BASE {
public:
USER_PROPERTY(varT & val);
virtual ~USER_PROPERTY();
bool isPassword,
bool isStat,
STG_LOGGER & logger,
- const std::string & sd);
+ const std::string & sd,
+ std::map<std::string, USER_PROPERTY_BASE*> & properties);
virtual ~USER_PROPERTY_LOGGED() {}
USER_PROPERTY_LOGGED<varT> * GetPointer() throw() { return this; }
USER_STAT stat;
USER_CONF conf;
+ std::map<std::string, USER_PROPERTY_BASE *> properties;
public:
USER_PROPERTIES(const std::string & sd);
void SetProperties(const USER_PROPERTIES & p) { stat = p.stat; conf = p.conf; }
+ std::string GetPropertyValue(const std::string & name) const;
+ bool Exists(const std::string & name) const;
+
USER_PROPERTY_LOGGED<double> cash;
USER_PROPERTY_LOGGED<DIR_TRAFF> up;
USER_PROPERTY_LOGGED<DIR_TRAFF> down;
bool isPass,
bool isSt,
STG_LOGGER & logger,
- const std::string & sd)
+ const std::string & sd,
+ std::map<std::string, USER_PROPERTY_BASE*> & properties)
: USER_PROPERTY<varT>(val),
stgLogger(logger),
name(n),
scriptsDir(sd)
{
+properties.insert(std::make_pair(ToLower(name), this));
}
//-------------------------------------------------------------------------
template <typename varT>
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
+inline
+std::string USER_PROPERTIES::GetPropertyValue(const std::string & name) const
+{
+std::map<std::string, USER_PROPERTY_BASE*>::const_iterator it = properties.find(name);
+if (it == properties.end())
+ return "";
+return it->second->ToString();
+}
+//-----------------------------------------------------------------------------
+inline
+bool USER_PROPERTIES::Exists(const std::string & name) const
+{
+return properties.find(name) != properties.end();
+}
+//-------------------------------------------------------------------------
+//-------------------------------------------------------------------------
+//-------------------------------------------------------------------------
template<typename varT>
inline
std::ostream & operator<< (std::ostream & stream, const USER_PROPERTY<varT> & value)
}
//-----------------------------------------------------------------------------
template<typename varT>
+inline
std::string USER_PROPERTY<varT>::ToString() const
{
-std::stringstream stream;
+std::ostringstream stream;
stream << value;
return stream.str();
}
it != rsSettings.GetUserParams().end();
++it)
{
- std::string parameter(GetUserParam(rsu.user, *it));
+ std::string parameter(rsu.user->GetParamValue(it->c_str()));
if (params.length() + parameter.length() > RS_PARAMS_LEN - 1)
break;
params += parameter + " ";
return std::vector<uint32_t>();
}
//-----------------------------------------------------------------------------
-std::string REMOTE_SCRIPT::GetUserParam(USER_PTR u, const std::string & paramName) const
-{
-std::string value = "";
-if (strcasecmp(paramName.c_str(), "cash") == 0)
- strprintf(&value, "%f", u->GetProperty().cash.Get());
-else
-if (strcasecmp(paramName.c_str(), "freeMb") == 0)
- strprintf(&value, "%f", u->GetProperty().freeMb.Get());
-else
-if (strcasecmp(paramName.c_str(), "passive") == 0)
- strprintf(&value, "%d", u->GetProperty().passive.Get());
-else
-if (strcasecmp(paramName.c_str(), "disabled") == 0)
- strprintf(&value, "%d", u->GetProperty().disabled.Get());
-else
-if (strcasecmp(paramName.c_str(), "alwaysOnline") == 0)
- strprintf(&value, "%d", u->GetProperty().alwaysOnline.Get());
-else
-if (strcasecmp(paramName.c_str(), "tariffName") == 0 ||
- strcasecmp(paramName.c_str(), "tariff") == 0)
- value = "\"" + u->GetProperty().tariffName.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "nextTariff") == 0)
- value = "\"" + u->GetProperty().nextTariff.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "address") == 0)
- value = "\"" + u->GetProperty().address.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "note") == 0)
- value = "\"" + u->GetProperty().note.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "group") == 0)
- value = "\"" + u->GetProperty().group.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "email") == 0)
- value = "\"" + u->GetProperty().email.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "realName") == 0)
- value = "\"" + u->GetProperty().realName.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "credit") == 0)
- strprintf(&value, "%f", u->GetProperty().credit.Get());
-else
-if (strcasecmp(paramName.c_str(), "userdata0") == 0)
- value = "\"" + u->GetProperty().userdata0.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "userdata1") == 0)
- value = "\"" + u->GetProperty().userdata1.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "userdata2") == 0)
- value = "\"" + u->GetProperty().userdata2.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "userdata3") == 0)
- value = "\"" + u->GetProperty().userdata3.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "userdata4") == 0)
- value = "\"" + u->GetProperty().userdata4.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "userdata5") == 0)
- value = "\"" + u->GetProperty().userdata5.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "userdata6") == 0)
- value = "\"" + u->GetProperty().userdata6.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "userdata7") == 0)
- value = "\"" + u->GetProperty().userdata7.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "userdata8") == 0)
- value = "\"" + u->GetProperty().userdata8.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "userdata9") == 0)
- value = "\"" + u->GetProperty().userdata9.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "enabledDirs") == 0)
- value = u->GetEnabledDirs();
-else
- printfd(__FILE__, "Unknown value name: %s\n", paramName.c_str());
-return value;
-}
-//-----------------------------------------------------------------------------
void REMOTE_SCRIPT::SetUserNotifiers(USER_PTR u)
{
ipNotifierList.push_front(RS::IP_NOTIFIER(*this, u));
USER_PROPERTIES::USER_PROPERTIES(const std::string & sd)
: stat(),
conf(),
- cash (stat.cash, "cash", false, true, GetStgLogger(), sd),
- up (stat.monthUp, "upload", false, true, GetStgLogger(), sd),
- down (stat.monthDown, "download", false, true, GetStgLogger(), sd),
- lastCashAdd (stat.lastCashAdd, "lastCashAdd", false, true, GetStgLogger(), sd),
- passiveTime (stat.passiveTime, "passiveTime", false, true, GetStgLogger(), sd),
- lastCashAddTime (stat.lastCashAddTime, "lastCashAddTime", false, true, GetStgLogger(), sd),
- freeMb (stat.freeMb, "freeMb", false, true, GetStgLogger(), sd),
- lastActivityTime(stat.lastActivityTime, "lastActivityTime", false, true, GetStgLogger(), sd),
+ cash (stat.cash, "cash", false, true, GetStgLogger(), sd, properties),
+ up (stat.monthUp, "upload", false, true, GetStgLogger(), sd, properties),
+ down (stat.monthDown, "download", false, true, GetStgLogger(), sd, properties),
+ lastCashAdd (stat.lastCashAdd, "lastCashAdd", false, true, GetStgLogger(), sd, properties),
+ passiveTime (stat.passiveTime, "passiveTime", false, true, GetStgLogger(), sd, properties),
+ lastCashAddTime (stat.lastCashAddTime, "lastCashAddTime", false, true, GetStgLogger(), sd, properties),
+ freeMb (stat.freeMb, "freeMb", false, true, GetStgLogger(), sd, properties),
+ lastActivityTime(stat.lastActivityTime, "lastActivityTime", false, true, GetStgLogger(), sd, properties),
-
- password (conf.password, "password", true, false, GetStgLogger(), sd),
- passive (conf.passive, "passive", false, false, GetStgLogger(), sd),
- disabled (conf.disabled, "disabled", false, false, GetStgLogger(), sd),
- disabledDetailStat(conf.disabledDetailStat, "DisabledDetailStat", false, false, GetStgLogger(), sd),
- alwaysOnline(conf.alwaysOnline, "alwaysOnline", false, false, GetStgLogger(), sd),
- tariffName (conf.tariffName, "tariff", false, false, GetStgLogger(), sd),
- nextTariff (conf.nextTariff, "new tariff", false, false, GetStgLogger(), sd),
- address (conf.address, "address", false, false, GetStgLogger(), sd),
- note (conf.note, "note", false, false, GetStgLogger(), sd),
- group (conf.group, "group", false, false, GetStgLogger(), sd),
- email (conf.email, "email", false, false, GetStgLogger(), sd),
- phone (conf.phone, "phone", false, false, GetStgLogger(), sd),
- realName (conf.realName, "realName", false, false, GetStgLogger(), sd),
- credit (conf.credit, "credit", false, false, GetStgLogger(), sd),
- creditExpire(conf.creditExpire, "creditExpire", false, false, GetStgLogger(), sd),
- ips (conf.ips, "IP", false, false, GetStgLogger(), sd),
- userdata0 (conf.userdata[0], "userdata0", false, false, GetStgLogger(), sd),
- userdata1 (conf.userdata[1], "userdata1", false, false, GetStgLogger(), sd),
- userdata2 (conf.userdata[2], "userdata2", false, false, GetStgLogger(), sd),
- userdata3 (conf.userdata[3], "userdata3", false, false, GetStgLogger(), sd),
- userdata4 (conf.userdata[4], "userdata4", false, false, GetStgLogger(), sd),
- userdata5 (conf.userdata[5], "userdata5", false, false, GetStgLogger(), sd),
- userdata6 (conf.userdata[6], "userdata6", false, false, GetStgLogger(), sd),
- userdata7 (conf.userdata[7], "userdata7", false, false, GetStgLogger(), sd),
- userdata8 (conf.userdata[8], "userdata8", false, false, GetStgLogger(), sd),
- userdata9 (conf.userdata[9], "userdata9", false, false, GetStgLogger(), sd)
+ password (conf.password, "password", true, false, GetStgLogger(), sd, properties),
+ passive (conf.passive, "passive", false, false, GetStgLogger(), sd, properties),
+ disabled (conf.disabled, "disabled", false, false, GetStgLogger(), sd, properties),
+ disabledDetailStat(conf.disabledDetailStat, "DisabledDetailStat", false, false, GetStgLogger(), sd, properties),
+ alwaysOnline(conf.alwaysOnline, "alwaysOnline", false, false, GetStgLogger(), sd, properties),
+ tariffName (conf.tariffName, "tariff", false, false, GetStgLogger(), sd, properties),
+ nextTariff (conf.nextTariff, "new tariff", false, false, GetStgLogger(), sd, properties),
+ address (conf.address, "address", false, false, GetStgLogger(), sd, properties),
+ note (conf.note, "note", false, false, GetStgLogger(), sd, properties),
+ group (conf.group, "group", false, false, GetStgLogger(), sd, properties),
+ email (conf.email, "email", false, false, GetStgLogger(), sd, properties),
+ phone (conf.phone, "phone", false, false, GetStgLogger(), sd, properties),
+ realName (conf.realName, "realName", false, false, GetStgLogger(), sd, properties),
+ credit (conf.credit, "credit", false, false, GetStgLogger(), sd, properties),
+ creditExpire(conf.creditExpire, "creditExpire", false, false, GetStgLogger(), sd, properties),
+ ips (conf.ips, "ips", false, false, GetStgLogger(), sd, properties),
+ userdata0 (conf.userdata[0], "userdata0", false, false, GetStgLogger(), sd, properties),
+ userdata1 (conf.userdata[1], "userdata1", false, false, GetStgLogger(), sd, properties),
+ userdata2 (conf.userdata[2], "userdata2", false, false, GetStgLogger(), sd, properties),
+ userdata3 (conf.userdata[3], "userdata3", false, false, GetStgLogger(), sd, properties),
+ userdata4 (conf.userdata[4], "userdata4", false, false, GetStgLogger(), sd, properties),
+ userdata5 (conf.userdata[5], "userdata5", false, false, GetStgLogger(), sd, properties),
+ userdata6 (conf.userdata[6], "userdata6", false, false, GetStgLogger(), sd, properties),
+ userdata7 (conf.userdata[7], "userdata7", false, false, GetStgLogger(), sd, properties),
+ userdata8 (conf.userdata[8], "userdata8", false, false, GetStgLogger(), sd, properties),
+ userdata9 (conf.userdata[9], "userdata9", false, false, GetStgLogger(), sd, properties)
{}