X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/1a9bbae3582d2e2a9c10f50ddc47bf8d23101cdc..0907aa4037b12b6b88ee24495d4577a064d4f8db:/projects/stargazer/user_impl.h diff --git a/projects/stargazer/user_impl.h b/projects/stargazer/user_impl.h index acb4d58a..2e254d63 100644 --- a/projects/stargazer/user_impl.h +++ b/projects/stargazer/user_impl.h @@ -18,23 +18,9 @@ * Author : Boris Mikhailenko */ -/* - $Revision: 1.48 $ - $Date: 2010/11/03 10:50:03 $ - $Author: faust $ - */ - -#ifndef USER_IMPL_H -#define USER_IMPL_H - -#include -#include -#include -#include +#pragma once #include "stg/user.h" -#include "stg/os_int.h" -#include "stg/const.h" #include "stg/user_stat.h" #include "stg/user_conf.h" #include "stg/user_ips.h" @@ -42,260 +28,297 @@ #include "stg/auth.h" #include "stg/message.h" #include "stg/noncopyable.h" +#include "stg/const.h" + +#include +#include +#include + +#include +#include + +namespace STG +{ //----------------------------------------------------------------------------- -class TARIFF; -class TARIFFS; -class ADMIN; -class USER_IMPL; -class SETTINGS_IMPL; +struct Tariff; +struct Tariffs; +struct Admin; +class UserImpl; +#ifdef USE_ABSTRACT_SETTINGS +struct Settings; +#else +class SettingsImpl; +#endif //----------------------------------------------------------------------------- -class USER_ID_GENERATOR { -friend class USER_IMPL; -private: - USER_ID_GENERATOR() {} - int GetNextID() { static int id = 0; return id++; } +class CHG_PASSIVE_NOTIFIER : public PropertyNotifierBase { + public: + explicit CHG_PASSIVE_NOTIFIER(UserImpl * u) : user(u) {} + void Notify(const int & oldPassive, const int & newPassive); + + private: + UserImpl * user; }; //----------------------------------------------------------------------------- -class CHG_PASSIVE_NOTIFIER : public PROPERTY_NOTIFIER_BASE, - private NONCOPYABLE { +class CHG_DISABLED_NOTIFIER : public PropertyNotifierBase { public: - CHG_PASSIVE_NOTIFIER(USER_IMPL * u) : user(u) {} - void Notify(const int & oldPassive, const int & newPassive); + explicit CHG_DISABLED_NOTIFIER(UserImpl * u) : user(u) {} + void Notify(const int & oldValue, const int & newValue); private: - USER_IMPL * user; + UserImpl * user; }; //----------------------------------------------------------------------------- -class CHG_TARIFF_NOTIFIER : public PROPERTY_NOTIFIER_BASE, - private NONCOPYABLE { +class CHG_TARIFF_NOTIFIER : public PropertyNotifierBase { public: - CHG_TARIFF_NOTIFIER(USER_IMPL * u) : user(u) {} + explicit CHG_TARIFF_NOTIFIER(UserImpl * u) : user(u) {} void Notify(const std::string & oldTariff, const std::string & newTariff); private: - USER_IMPL * user; + UserImpl * user; }; //----------------------------------------------------------------------------- -class CHG_CASH_NOTIFIER : public PROPERTY_NOTIFIER_BASE, - private NONCOPYABLE { +class CHG_CASH_NOTIFIER : public PropertyNotifierBase { public: - CHG_CASH_NOTIFIER(USER_IMPL * u) : user(u) {} + explicit CHG_CASH_NOTIFIER(UserImpl * u) : user(u) {} void Notify(const double & oldCash, const double & newCash); private: - USER_IMPL * user; + UserImpl * user; }; //----------------------------------------------------------------------------- -class CHG_IP_NOTIFIER : public PROPERTY_NOTIFIER_BASE, - private NONCOPYABLE { +class CHG_IPS_NOTIFIER : public PropertyNotifierBase { public: - CHG_IP_NOTIFIER(USER_IMPL * u) : user(u) {} - void Notify(const uint32_t & oldCash, const uint32_t & newCash); + explicit CHG_IPS_NOTIFIER(UserImpl * u) : user(u) {} + void Notify(const UserIPs & oldIPs, const UserIPs & newIPs); private: - USER_IMPL * user; + UserImpl * user; }; //----------------------------------------------------------------------------- -class USER_IMPL : public USER { -friend class CHG_PASSIVE_NOTIFIER; -friend class CHG_TARIFF_NOTIFIER; -friend class CHG_CASH_NOTIFIER; -friend class CHG_IP_NOTIFIER; -public: - USER_IMPL(const SETTINGS_IMPL * settings, - const STORE * store, - const TARIFFS * tariffs, - const ADMIN * sysAdmin, - const USERS * u); - USER_IMPL(const USER_IMPL & u); - virtual ~USER_IMPL(); +class UserImpl : public User { + friend class CHG_PASSIVE_NOTIFIER; + friend class CHG_DISABLED_NOTIFIER; + friend class CHG_TARIFF_NOTIFIER; + friend class CHG_CASH_NOTIFIER; + friend class CHG_IPS_NOTIFIER; + public: +#ifdef USE_ABSTRACT_SETTINGS + using Settings = STG::Settings; +#else + using Settings = STG::SettingsImpl; +#endif + UserImpl(const Settings * settings, + const Store * store, + const Tariffs * tariffs, + const Admin * sysAdmin, + const Users * u, + const Services & svcs); + UserImpl(const UserImpl & u); + virtual ~UserImpl(); + + int ReadConf(); + int ReadStat(); + int WriteConf() override; + int WriteStat() override; + int WriteMonthStat(); - int ReadConf(); - int ReadStat(); - int WriteConf(); - int WriteStat(); - int WriteMonthStat(); + const std::string & GetLogin() const override { return login; } + void SetLogin(std::string const & l); - std::string const & GetLogin() const { return login; } - void SetLogin(std::string const & l); + uint32_t GetCurrIP() const override{ return currIP; } + time_t GetCurrIPModificationTime() const override { return currIP.ModificationTime(); } - uint32_t GetCurrIP() const { return currIP; } - time_t GetCurrIPModificationTime() const { return currIP.ModificationTime(); } + void AddCurrIPBeforeNotifier(CURR_IP_NOTIFIER * notifier) override; + void DelCurrIPBeforeNotifier(const CURR_IP_NOTIFIER * notifier) override; + + void AddCurrIPAfterNotifier(CURR_IP_NOTIFIER * notifier) override; + void DelCurrIPAfterNotifier(const CURR_IP_NOTIFIER * notifier) override; - void AddCurrIPBeforeNotifier(PROPERTY_NOTIFIER_BASE *); - void DelCurrIPBeforeNotifier(PROPERTY_NOTIFIER_BASE *); + void AddConnectedBeforeNotifier(CONNECTED_NOTIFIER * notifier) override; + void DelConnectedBeforeNotifier(const CONNECTED_NOTIFIER * notifier) override; - void AddCurrIPAfterNotifier(PROPERTY_NOTIFIER_BASE *); - void DelCurrIPAfterNotifier(PROPERTY_NOTIFIER_BASE *); + void AddConnectedAfterNotifier(CONNECTED_NOTIFIER * notifier) override; + void DelConnectedAfterNotifier(const CONNECTED_NOTIFIER * notifier) override; - void AddConnectedBeforeNotifier(PROPERTY_NOTIFIER_BASE *); - void DelConnectedBeforeNotifier(PROPERTY_NOTIFIER_BASE *); + int GetID() const override { return id; } - void AddConnectedAfterNotifier(PROPERTY_NOTIFIER_BASE *); - void DelConnectedAfterNotifier(PROPERTY_NOTIFIER_BASE *); + double GetPassiveTimePart() const override; + void ResetPassiveTime() { passiveTime = 0; } + void SetPassiveTimeAsNewUser(); - int GetID() const { return id; } + int WriteDetailStat(bool hard = false); - double GetPassiveTimePart() const; - void ResetPassiveTime() { passiveTime = 0; } - void SetPassiveTimeAsNewUser(); + const Tariff * GetTariff() const override { return tariff; } + void ResetNextTariff() override { nextTariff = ""; } - int WriteDetailStat(bool hard = false); + #ifdef TRAFF_STAT_WITH_PORTS + void AddTraffStatU(int dir, uint32_t ip, uint16_t port, uint32_t len); + void AddTraffStatD(int dir, uint32_t ip, uint16_t port, uint32_t len); + #else + void AddTraffStatU(int dir, uint32_t ip, uint32_t len); + void AddTraffStatD(int dir, uint32_t ip, uint32_t len); + #endif - const TARIFF * GetTariff() const { return tariff; } - void ResetNextTariff() { nextTariff = ""; } + const DirTraff & GetSessionUpload() const override { return sessionUpload; } + const DirTraff & GetSessionDownload() const override { return sessionDownload; } + time_t GetSessionUploadModificationTime() const override { return sessionUploadModTime; } + time_t GetSessionDownloadModificationTime() const override { return sessionDownloadModTime; } - #ifdef TRAFF_STAT_WITH_PORTS - void AddTraffStatU(int dir, uint32_t ip, uint16_t port, uint32_t len); - void AddTraffStatD(int dir, uint32_t ip, uint16_t port, uint32_t len); - #else - void AddTraffStatU(int dir, uint32_t ip, uint32_t len); - void AddTraffStatD(int dir, uint32_t ip, uint32_t len); - #endif + bool GetConnected() const override { return connected; } + time_t GetConnectedModificationTime() const override { return connected.ModificationTime(); } + const std::string & GetLastDisconnectReason() const override { return lastDisconnectReason; } + int GetAuthorized() const override { return static_cast(authorizedBy.size()); } + time_t GetAuthorizedModificationTime() const override { return authorizedModificationTime; } + int Authorize(uint32_t ip, uint32_t enabledDirs, const Auth * auth); + void Unauthorize(const Auth * auth, + const std::string & reason = std::string()); + bool IsAuthorizedBy(const Auth * auth) const override; + std::vector GetAuthorizers() const override; - const DIR_TRAFF & GetSessionUpload() const { return sessionUpload; } - const DIR_TRAFF & GetSessionDownload() const { return sessionDownload; } + int AddMessage(Message * msg) override; - bool GetConnected() const { return connected; } - time_t GetConnectedModificationTime() const { return connected.ModificationTime(); } - int GetAuthorized() const { return authorizedBy.size(); } - int Authorize(uint32_t ip, uint32_t enabledDirs, const AUTH * auth); - void Unauthorize(const AUTH * auth); - bool IsAuthorizedBy(const AUTH * auth) const; + void UpdatePingTime(time_t t = 0) override; + time_t GetPingTime() const override { return pingTime; } - int AddMessage(STG_MSG * msg); + void Run() override; - void UpdatePingTime(time_t t = 0); - time_t GetPingTime() const { return pingTime; } + const std::string & GetStrError() const override { return errorStr; } - void PrintUser() const; - void Run(); + UserProperties & GetProperties() override { return properties; } + const UserProperties & GetProperties() const override { return properties; } + + void SetDeleted() override { deleted = true; } + bool GetDeleted() const override { return deleted; } + + time_t GetLastWriteStatTime() const override { return lastWriteStat; } + + void MidnightResetSessionStat(); + void ProcessDayFee(); + void ProcessDayFeeSpread(); + void ProcessNewMonth(); + void ProcessDailyFee(); + void ProcessServices(); + + bool IsInetable() override; + std::string GetEnabledDirs() const override; + + void OnAdd() override; + void OnDelete() override; + + virtual std::string GetParamValue(const std::string & name) const override; + + private: + UserImpl & operator=(const UserImpl & rvalue); - const std::string & GetStrError() const { return errorStr; } + void Init(); - USER_PROPERTIES & GetProperty() { return property; }; - const USER_PROPERTIES & GetProperty() const { return property; }; + const Users* users; + UserProperties properties; + STG::Logger& WriteServLog; - void SetDeleted() { deleted = true; } - bool GetDeleted() const { return deleted; } + void Connect(bool fakeConnect = false); + void Disconnect(bool fakeDisconnect, const std::string & reason); + int SaveMonthStat(int month, int year); - time_t GetLastWriteStatTime() const { return lastWriteStat; } + void SetPrepaidTraff(); - void MidnightResetSessionStat(); - void ProcessDayFee(); - void SetPrepaidTraff(); - void ProcessDayFeeSpread(); - void ProcessNewMonth(); + int SendMessage(Message & msg) const; + void ScanMessage(); - bool IsInetable(); - std::string GetEnabledDirs(); + time_t lastScanMessages; - void OnAdd(); - void OnDelete(); + std::string login; + int id; + bool __connected; + UserProperty connected; -private: - const USERS * users; - USER_PROPERTIES property; - STG_LOGGER & WriteServLog; - - void Connect(bool fakeConnect = false); - void Disconnect(bool fakeDisconnect, const std::string & reason); - int SaveMonthStat(int month, int year); - - int SendMessage(STG_MSG & msg) const; - void ScanMessage(); - - time_t lastScanMessages; - - std::string login; - int id; - bool __connected; - USER_PROPERTY connected; - - bool enabledDirs[DIR_NUM]; - - USER_ID_GENERATOR userIDGenerator; - - uint32_t __currIP; // Current user's ip - USER_PROPERTY currIP; - - uint32_t lastIPForDisconnect; // User's ip after unauth but before disconnect - - time_t pingTime; - - const ADMIN * sysAdmin; - const STORE * store; - - const TARIFFS * tariffs; - const TARIFF * tariff; - - TRAFF_STAT traffStat; - std::pair traffStatSaved; - - const SETTINGS_IMPL * settings; - - std::set authorizedBy; - - std::list messages; - - bool deleted; - - time_t lastWriteStat; - time_t lastWriteDetailedStat; - - // Properties - USER_PROPERTY & cash; - USER_PROPERTY & up; - USER_PROPERTY & down; - USER_PROPERTY & lastCashAdd; - USER_PROPERTY & passiveTime; - USER_PROPERTY & lastCashAddTime; - USER_PROPERTY & freeMb; - USER_PROPERTY & lastActivityTime; - USER_PROPERTY & password; - USER_PROPERTY & passive; - USER_PROPERTY & disabled; - USER_PROPERTY & disabledDetailStat; - USER_PROPERTY & alwaysOnline; - USER_PROPERTY & tariffName; - USER_PROPERTY & nextTariff; - USER_PROPERTY & address; - USER_PROPERTY & note; - USER_PROPERTY & group; - USER_PROPERTY & email; - USER_PROPERTY & phone; - USER_PROPERTY & realName; - USER_PROPERTY & credit; - USER_PROPERTY & creditExpire; - USER_PROPERTY & ips; - USER_PROPERTY & userdata0; - USER_PROPERTY & userdata1; - USER_PROPERTY & userdata2; - USER_PROPERTY & userdata3; - USER_PROPERTY & userdata4; - USER_PROPERTY & userdata5; - USER_PROPERTY & userdata6; - USER_PROPERTY & userdata7; - USER_PROPERTY & userdata8; - USER_PROPERTY & userdata9; - - // End properties - - DIR_TRAFF sessionUpload; - DIR_TRAFF sessionDownload; - - CHG_PASSIVE_NOTIFIER passiveNotifier; - CHG_TARIFF_NOTIFIER tariffNotifier; - CHG_CASH_NOTIFIER cashNotifier; - CHG_IP_NOTIFIER ipNotifier; - - mutable pthread_mutex_t mutex; - - std::string errorStr; + bool enabledDirs[DIR_NUM]; + + uint32_t __currIP; // Current user's ip + UserProperty currIP; + + uint32_t lastIPForDisconnect; // User's ip after unauth but before disconnect + std::string lastDisconnectReason; + + time_t pingTime; + + const Admin * sysAdmin; + const Store * store; + + const Tariffs * tariffs; + const Tariff * tariff; + + const Services & m_services; + + TraffStat traffStat; + std::pair traffStatSaved; + + const Settings * settings; + + std::set authorizedBy; + time_t authorizedModificationTime; + + std::vector messages; + + bool deleted; + + time_t lastWriteStat; + time_t lastWriteDetailedStat; + + // Properties + UserProperty & cash; + UserProperty & up; + UserProperty & down; + UserProperty & lastCashAdd; + UserProperty & passiveTime; + UserProperty & lastCashAddTime; + UserProperty & freeMb; + UserProperty & lastActivityTime; + UserProperty & password; + UserProperty & passive; + UserProperty & disabled; + UserProperty & disabledDetailStat; + UserProperty & alwaysOnline; + UserProperty & tariffName; + UserProperty & nextTariff; + UserProperty & address; + UserProperty & note; + UserProperty & group; + UserProperty & email; + UserProperty & phone; + UserProperty & realName; + UserProperty & credit; + UserProperty & creditExpire; + UserProperty & ips; + UserProperty & userdata0; + UserProperty & userdata1; + UserProperty & userdata2; + UserProperty & userdata3; + UserProperty & userdata4; + UserProperty & userdata5; + UserProperty & userdata6; + UserProperty & userdata7; + UserProperty & userdata8; + UserProperty & userdata9; + + // End properties + + DirTraff sessionUpload; + DirTraff sessionDownload; + time_t sessionUploadModTime; + time_t sessionDownloadModTime; + + CHG_PASSIVE_NOTIFIER passiveNotifier; + CHG_DISABLED_NOTIFIER disabledNotifier; + CHG_TARIFF_NOTIFIER tariffNotifier; + CHG_CASH_NOTIFIER cashNotifier; + CHG_IPS_NOTIFIER ipNotifier; + + mutable pthread_mutex_t mutex; + + std::string errorStr; }; //----------------------------------------------------------------------------- -typedef USER_IMPL * USER_IMPL_PTR; - -#endif //USER_H +}