X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/53e3e5c4fa09c1ca7e1cb44054ec38441125868c..38da2fa514bbfb11197fa17ecb1cde480bb9e2cc:/projects/stargazer/user_property.h?ds=sidebyside diff --git a/projects/stargazer/user_property.h b/projects/stargazer/user_property.h index 57e11a49..b269389a 100644 --- a/projects/stargazer/user_property.h +++ b/projects/stargazer/user_property.h @@ -4,7 +4,6 @@ $Date: 2010/09/13 05:54:43 $ $Author: faust $ */ - #ifndef USER_PROPERTY_H #define USER_PROPERTY_H @@ -13,41 +12,36 @@ $Author: faust $ #include #include #include -#include -#include "base_store.h" -#include "stg_logger.h" +#include "store.h" #include "admin.h" -#include "settings.h" #include "notifer.h" #include "stg_logger.h" #include "stg_locker.h" #include "script_executer.h" -using namespace std; - extern const volatile time_t stgTime; //----------------------------------------------------------------------------- template -class USER_PROPERTY - { +class USER_PROPERTY { public: - USER_PROPERTY(varT& val); - USER_PROPERTY& operator= (const varT&); - USER_PROPERTY& operator-= (const varT&); + USER_PROPERTY(varT & val); virtual ~USER_PROPERTY(); + void Set(const varT & rvalue); + + USER_PROPERTY & operator= (const varT & rvalue); + USER_PROPERTY & operator-= (const varT & rvalue); + const varT * operator&() const throw(); - const varT& ConstData() const throw(); + const varT & ConstData() const throw(); operator const varT&() const throw() { return value; } - //bool IsEmpty() const throw(); - void AddBeforeNotifier(PROPERTY_NOTIFIER_BASE * n); void DelBeforeNotifier(PROPERTY_NOTIFIER_BASE * n); @@ -57,66 +51,60 @@ public: time_t ModificationTime() const throw(); void ModifyTime() throw(); -protected: - varT & value; - time_t modificationTime; - //typedef set *>::iterator notifier_iter_t; - mutable set *> beforeNotifiers; - mutable set *> afterNotifiers; - mutable pthread_mutex_t mutex; - }; +private: + varT & value; + time_t modificationTime; + std::set *> beforeNotifiers; + std::set *> afterNotifiers; + pthread_mutex_t mutex; +}; //----------------------------------------------------------------------------- template -class USER_PROPERTY_LOGGED: public USER_PROPERTY - { +class USER_PROPERTY_LOGGED: public USER_PROPERTY { public: - USER_PROPERTY_LOGGED(varT& val, - const string n, + USER_PROPERTY_LOGGED(varT & val, + const std::string n, bool isPassword, bool isStat, STG_LOGGER & logger, - const SETTINGS * s); + const std::string & sd); virtual ~USER_PROPERTY_LOGGED(); - //operator const varT&() const throw();; USER_PROPERTY_LOGGED * GetPointer() throw(); const varT & Get() const; - const string & GetName() const; + const std::string & GetName() const; bool Set(const varT & val, - const ADMIN & admin, - const string & login, - const BASE_STORE * store, - const string & msg = ""); -protected: - void WriteAccessDenied(const string & login, - const ADMIN & admin, - const string & parameter); - - void WriteSuccessChange(const string & login, - const ADMIN & admin, - const string & parameter, - const string & oldValue, - const string & newValue, - const string & msg, - const BASE_STORE * store); - - void OnChange(const string & login, - const string & paramName, - const string & oldValue, - const string & newValue, - const ADMIN & admin); - - string name; // parameter name. needed for logging - bool isPassword; // is parameter password. when true, it will be logged as ******* - bool isStat; // is parameter a stat data or conf data? - mutable pthread_mutex_t mutex; - STG_LOGGER & stgLogger; // server's logger - const SETTINGS * settings; - }; + const ADMIN * admin, + const std::string & login, + const STORE * store, + const std::string & msg = ""); +private: + void WriteAccessDenied(const std::string & login, + const ADMIN * admin, + const std::string & parameter); + + void WriteSuccessChange(const std::string & login, + const ADMIN * admin, + const std::string & parameter, + const std::string & oldValue, + const std::string & newValue, + const std::string & msg, + const STORE * store); + + void OnChange(const std::string & login, + const std::string & paramName, + const std::string & oldValue, + const std::string & newValue, + const ADMIN * admin); + + STG_LOGGER & stgLogger; + bool isPassword; + bool isStat; + std::string name; + const std::string scriptsDir; +}; //----------------------------------------------------------------------------- -class USER_PROPERTIES - { - friend class USER; +class USER_PROPERTIES { /* В этом месте важен порядок следования приватной и открытой частей. Это связано с тем, что часть которая находится в публичной секции @@ -130,8 +118,10 @@ private: USER_CONF conf; public: - USER_PROPERTIES(const SETTINGS * settings); + USER_PROPERTIES(const std::string & sd); + USER_STAT & Stat() { return stat; } + USER_CONF & Conf() { return conf; } const USER_STAT & GetStat() const { return stat; } const USER_CONF & GetConf() const { return conf; } void SetStat(const USER_STAT & s) { stat = s; } @@ -148,43 +138,41 @@ public: USER_PROPERTY_LOGGED freeMb; USER_PROPERTY_LOGGED lastActivityTime; - USER_PROPERTY_LOGGED password; + USER_PROPERTY_LOGGED password; USER_PROPERTY_LOGGED passive; USER_PROPERTY_LOGGED disabled; USER_PROPERTY_LOGGED disabledDetailStat; USER_PROPERTY_LOGGED alwaysOnline; - USER_PROPERTY_LOGGED tariffName; - USER_PROPERTY_LOGGED nextTariff; - USER_PROPERTY_LOGGED address; - USER_PROPERTY_LOGGED note; - USER_PROPERTY_LOGGED group; - USER_PROPERTY_LOGGED email; - USER_PROPERTY_LOGGED phone; - USER_PROPERTY_LOGGED realName; + USER_PROPERTY_LOGGED tariffName; + USER_PROPERTY_LOGGED nextTariff; + USER_PROPERTY_LOGGED address; + USER_PROPERTY_LOGGED note; + USER_PROPERTY_LOGGED group; + USER_PROPERTY_LOGGED email; + USER_PROPERTY_LOGGED phone; + USER_PROPERTY_LOGGED realName; USER_PROPERTY_LOGGED credit; USER_PROPERTY_LOGGED creditExpire; USER_PROPERTY_LOGGED ips; - USER_PROPERTY_LOGGED userdata0; - USER_PROPERTY_LOGGED userdata1; - USER_PROPERTY_LOGGED userdata2; - USER_PROPERTY_LOGGED userdata3; - USER_PROPERTY_LOGGED userdata4; - USER_PROPERTY_LOGGED userdata5; - USER_PROPERTY_LOGGED userdata6; - USER_PROPERTY_LOGGED userdata7; - USER_PROPERTY_LOGGED userdata8; - USER_PROPERTY_LOGGED userdata9; - }; - + USER_PROPERTY_LOGGED userdata0; + USER_PROPERTY_LOGGED userdata1; + USER_PROPERTY_LOGGED userdata2; + USER_PROPERTY_LOGGED userdata3; + USER_PROPERTY_LOGGED userdata4; + USER_PROPERTY_LOGGED userdata5; + USER_PROPERTY_LOGGED userdata6; + USER_PROPERTY_LOGGED userdata7; + USER_PROPERTY_LOGGED userdata8; + USER_PROPERTY_LOGGED userdata9; +}; //============================================================================= //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- template -USER_PROPERTY::USER_PROPERTY(varT& val) -: -value(val) +USER_PROPERTY::USER_PROPERTY(varT & val) + : value(val) { pthread_mutex_init(&mutex, NULL); modificationTime = stgTime; @@ -198,83 +186,57 @@ USER_PROPERTY::~USER_PROPERTY() template void USER_PROPERTY::ModifyTime() throw() { - modificationTime = stgTime; +modificationTime = stgTime; } //----------------------------------------------------------------------------- template -USER_PROPERTY& USER_PROPERTY::operator= (const varT& newValue) +void USER_PROPERTY::Set(const varT & rvalue) { STG_LOCKER locker(&mutex, __FILE__, __LINE__); -/* -TODO -if (value == newValue) - return *this;*/ - -typename set *>::iterator ni; - -//printf("USER_PROPERTY::operator= (const varT& rhs)\n"); +typename std::set *>::iterator ni; varT oldVal = value; ni = beforeNotifiers.begin(); while (ni != beforeNotifiers.end()) - (*ni++)->Notify(oldVal, newValue); + (*ni++)->Notify(oldVal, rvalue); -value = newValue; +value = rvalue; modificationTime = stgTime; ni = afterNotifiers.begin(); while (ni != afterNotifiers.end()) - (*ni++)->Notify(oldVal, newValue); - + (*ni++)->Notify(oldVal, rvalue); +} +//----------------------------------------------------------------------------- +template +USER_PROPERTY & USER_PROPERTY::operator= (const varT & newValue) +{ +Set(newValue); return *this; } //----------------------------------------------------------------------------- template -USER_PROPERTY& USER_PROPERTY::operator-= (const varT& delta) +USER_PROPERTY& USER_PROPERTY::operator-= (const varT & delta) { -STG_LOCKER locker(&mutex, __FILE__, __LINE__); - -typename set *>::iterator ni; - -varT oldVal = value; - -ni = beforeNotifiers.begin(); -while (ni != beforeNotifiers.end()) - (*ni++)->Notify(oldVal, oldVal - delta); - -value -= delta; -modificationTime = stgTime; - -ni = afterNotifiers.begin(); -while (ni != afterNotifiers.end()) - (*ni++)->Notify(oldVal, value); - +varT newValue = ConstData() - delta; +Set(newValue); return *this; } //----------------------------------------------------------------------------- template const varT * USER_PROPERTY::operator&() const throw() { -STG_LOCKER locker(&mutex, __FILE__, __LINE__); return &value; } //----------------------------------------------------------------------------- template -const varT& USER_PROPERTY::ConstData() const throw() +const varT & USER_PROPERTY::ConstData() const throw() { -STG_LOCKER locker(&mutex, __FILE__, __LINE__); return value; } //----------------------------------------------------------------------------- -/*template -bool USER_PROPERTY::IsEmpty() const throw() -{ -STG_LOCKER locker(&mutex, __FILE__, __LINE__); -return !is_set; -}*/ -//----------------------------------------------------------------------------- template void USER_PROPERTY::AddBeforeNotifier(PROPERTY_NOTIFIER_BASE * n) { @@ -306,78 +268,66 @@ afterNotifiers.erase(n); template time_t USER_PROPERTY::ModificationTime() const throw() { -STG_LOCKER locker(&mutex, __FILE__, __LINE__); return modificationTime; } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- template -USER_PROPERTY_LOGGED::USER_PROPERTY_LOGGED( - varT& val, - string n, - bool isPass, - bool isSt, - STG_LOGGER & logger, - const SETTINGS * s) - -:USER_PROPERTY(val), -stgLogger(logger) +USER_PROPERTY_LOGGED::USER_PROPERTY_LOGGED(varT & val, + std::string n, + bool isPass, + bool isSt, + STG_LOGGER & logger, + const std::string & sd) + + : USER_PROPERTY(val), + stgLogger(logger), + isPassword(isPass), + isStat(isSt), + name(n), + scriptsDir(sd) { -pthread_mutex_init(&mutex, NULL); -STG_LOCKER locker(&mutex, __FILE__, __LINE__); -USER_PROPERTY::value = val; -isPassword = isPass; -isStat = isSt; -name = n; -settings = s; } //----------------------------------------------------------------------------- template USER_PROPERTY_LOGGED::~USER_PROPERTY_LOGGED() { -STG_LOCKER locker(&mutex, __FILE__, __LINE__); } //----------------------------------------------------------------------------- template USER_PROPERTY_LOGGED * USER_PROPERTY_LOGGED::GetPointer() throw() { -STG_LOCKER locker(&mutex, __FILE__, __LINE__); return this; } //----------------------------------------------------------------------------- template const varT & USER_PROPERTY_LOGGED::Get() const { -STG_LOCKER locker(&mutex, __FILE__, __LINE__); -return USER_PROPERTY::value; +return USER_PROPERTY::ConstData(); }; //------------------------------------------------------------------------- template -const string & USER_PROPERTY_LOGGED::GetName() const +const std::string & USER_PROPERTY_LOGGED::GetName() const { -STG_LOCKER locker(&mutex, __FILE__, __LINE__); return name; }; //------------------------------------------------------------------------- template bool USER_PROPERTY_LOGGED::Set(const varT & val, - const ADMIN & admin, - const string & login, - const BASE_STORE * store, - const string & msg) + const ADMIN * admin, + const std::string & login, + const STORE * store, + const std::string & msg) { -STG_LOCKER locker(&mutex, __FILE__, __LINE__); - -//cout << "USER_PROPERTY_LOGGED " << val << endl; -//value = val; -//modificationTime = stgTime; - -const PRIV * priv = admin.GetPriv(); -string adm_login = admin.GetLogin(); -string adm_ip = admin.GetAdminIPStr(); - -if ((priv->userConf && !isStat) || (priv->userStat && isStat) || (priv->userPasswd && isPassword) || (priv->userCash && name == "cash")) +const PRIV * priv = admin->GetPriv(); +std::string adm_login = admin->GetLogin(); +std::string adm_ip = admin->GetIPStr(); + +if ((priv->userConf && !isStat) || + (priv->userStat && isStat) || + (priv->userPasswd && isPassword) || + (priv->userCash && name == "cash")) { stringstream oldVal; stringstream newVal; @@ -385,7 +335,7 @@ if ((priv->userConf && !isStat) || (priv->userStat && isStat) || (priv->userPass oldVal.flags(oldVal.flags() | ios::fixed); newVal.flags(newVal.flags() | ios::fixed); - oldVal << USER_PROPERTY::value; + oldVal << USER_PROPERTY::ConstData(); newVal << val; OnChange(login, name, oldVal.str(), newVal.str(), admin); @@ -398,7 +348,7 @@ if ((priv->userConf && !isStat) || (priv->userStat && isStat) || (priv->userPass { WriteSuccessChange(login, admin, name, oldVal.str(), newVal.str(), msg, store); } - USER_PROPERTY::operator =(val); + USER_PROPERTY::Set(val); return true; } else @@ -410,78 +360,61 @@ return true; } //------------------------------------------------------------------------- template -void USER_PROPERTY_LOGGED::WriteAccessDenied(const string & login, - const ADMIN & admin, - const string & parameter) +void USER_PROPERTY_LOGGED::WriteAccessDenied(const std::string & login, + const ADMIN * admin, + const std::string & parameter) { stgLogger("%s Change user \'%s.\' Parameter \'%s\'. Access denied.", - admin.GetLogStr().c_str(), login.c_str(), parameter.c_str()); + admin->GetLogStr().c_str(), login.c_str(), parameter.c_str()); } //------------------------------------------------------------------------- template -void USER_PROPERTY_LOGGED::WriteSuccessChange(const string & login, - const ADMIN & admin, - const string & parameter, - const string & oldValue, - const string & newValue, - const string & msg, - const BASE_STORE * store) +void USER_PROPERTY_LOGGED::WriteSuccessChange(const std::string & login, + const ADMIN * admin, + const std::string & parameter, + const std::string & oldValue, + const std::string & newValue, + const std::string & msg, + const STORE * store) { stgLogger("%s User \'%s\': \'%s\' parameter changed from \'%s\' to \'%s\'. %s", - admin.GetLogStr().c_str(), + admin->GetLogStr().c_str(), login.c_str(), parameter.c_str(), oldValue.c_str(), newValue.c_str(), msg.c_str()); - -/*char userLogMsg[2048]; -sprintf(userLogMsg, "\'%s\' parameter changed from \'%s\' to \'%s\'. %s", - parameter.c_str(), oldValue.c_str(), - newValue.c_str(), msg.c_str());*/ -store->WriteUserChgLog(login, admin.GetLogin(), admin.GetAdminIP(), parameter, oldValue, newValue, msg); -//store->WriteLogString(userLogMsg, login); +store->WriteUserChgLog(login, admin->GetLogin(), admin->GetIP(), parameter, oldValue, newValue, msg); } //------------------------------------------------------------------------- template -void USER_PROPERTY_LOGGED::OnChange(const string & login, - const string & paramName, - const string & oldValue, - const string & newValue, - const ADMIN &) +void USER_PROPERTY_LOGGED::OnChange(const std::string & login, + const std::string & paramName, + const std::string & oldValue, + const std::string & newValue, + const ADMIN * admin) { -string str1; +std::string filePath = scriptsDir + "/OnChange"; -str1 = settings->GetConfDir() + "/OnChange"; - -if (access(str1.c_str(), X_OK) == 0) +if (access(filePath.c_str(), X_OK) == 0) { - string str2("\"" + str1 + "\" \"" + login + "\" \"" + paramName + "\" \"" + oldValue + "\" \"" + newValue + "\""); - ScriptExec(str2); + std::string execString("\"" + filePath + "\" \"" + login + "\" \"" + paramName + "\" \"" + oldValue + "\" \"" + newValue + "\" \"" + admin->GetLogin() + "\" \"" + admin->GetIPStr() + "\""); + ScriptExec(execString); } else { - stgLogger("Script OnChange cannot be executed. File %s not found.", str1.c_str()); + stgLogger("Script OnChange cannot be executed. File %s not found.", filePath.c_str()); } } //------------------------------------------------------------------------- //------------------------------------------------------------------------- //------------------------------------------------------------------------- template -stringstream & operator<< (stringstream & s, const USER_PROPERTY & v) +ostream & operator<< (ostream & stream, const USER_PROPERTY & value) { -s << v.ConstData(); -return s; +return stream << value.ConstData(); } //----------------------------------------------------------------------------- -template -ostream & operator<< (ostream & o, const USER_PROPERTY & v) -{ -return o << v.ConstData(); -} -//----------------------------------------------------------------------------- - #endif // USER_PROPERTY_H -