X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/90e389f6ec12e60a62c362296ffcf314feb5b03d..7e5eed1625077ed48df86b264c747cd456d0e25b:/projects/stargazer/users_impl.h diff --git a/projects/stargazer/users_impl.h b/projects/stargazer/users_impl.h index f0b8ae25..0cba7893 100644 --- a/projects/stargazer/users_impl.h +++ b/projects/stargazer/users_impl.h @@ -56,26 +56,6 @@ typedef std::list::const_iterator const_user_iter; class USERS_IMPL; //----------------------------------------------------------------------------- -class PROPERTY_NOTIFER_IP_BEFORE: public PROPERTY_NOTIFIER_BASE { -public: - PROPERTY_NOTIFER_IP_BEFORE(USERS_IMPL & us, user_iter u) : users(us), user(u) {} - void Notify(const uint32_t & oldValue, const uint32_t & newValue); - user_iter GetUser() const { return user; } -private: - USERS_IMPL & users; - user_iter user; -}; -//----------------------------------------------------------------------------- -class PROPERTY_NOTIFER_IP_AFTER: public PROPERTY_NOTIFIER_BASE { -public: - PROPERTY_NOTIFER_IP_AFTER(USERS_IMPL & us, user_iter u) : users(us), user(u) {} - void Notify(const uint32_t & oldValue, const uint32_t & newValue); - user_iter GetUser() const { return user; } -private: - USERS_IMPL & users; - user_iter user; -}; -//----------------------------------------------------------------------------- struct USER_TO_DEL { USER_TO_DEL() : iter(), @@ -91,10 +71,15 @@ class USERS_IMPL : private NONCOPYABLE, public USERS { friend class PROPERTY_NOTIFER_IP_AFTER; public: - USERS_IMPL(SETTINGS_IMPL * s, STORE * store, TARIFFS * tariffs, const ADMIN * sysAdmin); + USERS_IMPL(SETTINGS_IMPL * s, STORE * store, + TARIFFS * tariffs, SERVICES & svcs, + const ADMIN * sysAdmin); virtual ~USERS_IMPL(); int FindByName(const std::string & login, USER_PTR * user); + int FindByName(const std::string & login, CONST_USER_PTR * user) const; + + bool Exists(const std::string & login) const; bool TariffInUse(const std::string & tariffName) const; @@ -104,34 +89,51 @@ public: void AddNotifierUserDel(NOTIFIER_BASE *); void DelNotifierUserDel(NOTIFIER_BASE *); + void AddNotifierUserAdd(NOTIFIER_BASE *); + void DelNotifierUserAdd(NOTIFIER_BASE *); + + void AddNotifierUserDel(NOTIFIER_BASE *); + void DelNotifierUserDel(NOTIFIER_BASE *); + int Add(const std::string & login, const ADMIN * admin); void Del(const std::string & login, const ADMIN * admin); + bool Authorize(const std::string & login, uint32_t ip, + uint32_t enabledDirs, const AUTH * auth); + bool Unauthorize(const std::string & login, + const AUTH * auth, + const std::string & reason = std::string()); + int ReadUsers(); - int GetUserNum() const; + size_t Count() const { return users.size(); } int FindByIPIdx(uint32_t ip, USER_PTR * user) const; + int FindByIPIdx(uint32_t ip, USER_IMPL ** user) const; bool IsIPInIndex(uint32_t ip) const; + bool IsIPInUse(uint32_t ip, const std::string & login, CONST_USER_PTR * user) const; int OpenSearch(); int SearchNext(int handler, USER_PTR * user); + int SearchNext(int handler, USER_IMPL ** user); int CloseSearch(int handler); int Start(); int Stop(); private: + USERS_IMPL(const USERS_IMPL & rvalue); + USERS_IMPL & operator=(const USERS_IMPL & rvalue); + void AddToIPIdx(user_iter user); void DelFromIPIdx(uint32_t ip); + bool FindByIPIdx(uint32_t ip, user_iter & iter) const; int FindByNameNonLock(const std::string & login, user_iter * user); + int FindByNameNonLock(const std::string & login, const_user_iter * user) const; void RealDelUser(); void ProcessActions(); - void SetUserNotifiers(user_iter user); - void UnSetUserNotifiers(user_iter user); - void AddUserIntoIndexes(user_iter user); void DelUserFromIndexes(user_iter user); @@ -144,14 +146,13 @@ private: std::list users; std::list usersToDelete; - std::list userIPNotifiersBefore; - std::list userIPNotifiersAfter; std::map ipIndex; std::map loginIndex; SETTINGS_IMPL * settings; TARIFFS * tariffs; + SERVICES & m_services; STORE * store; const ADMIN * sysAdmin; STG_LOGGER & WriteServLog; @@ -167,9 +168,11 @@ private: std::set*> onAddNotifiers; std::set*> onDelNotifiers; + std::set*> onAddNotifiersImpl; + std::set*> onDelNotifiersImpl; }; //----------------------------------------------------------------------------- -inline +/*inline void PROPERTY_NOTIFER_IP_BEFORE::Notify(const uint32_t & oldValue, const uint32_t &) { @@ -191,6 +194,6 @@ if (!newValue) //EVENT_LOOP_SINGLETON::GetInstance().Enqueue(users, &USERS::AddToIPIdx, user); // Using explicit call to assure that index is valid, because fast reconnect with delayed call can result in authorization error users.AddToIPIdx(user); -} +}*/ //----------------------------------------------------------------------------- #endif