X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/687631532197750696d35aa12c40406b04fb878d..ad34d43426a49a050c807a9fffcda0ccf8bb23d2:/projects/stargazer/users_impl.h?ds=sidebyside diff --git a/projects/stargazer/users_impl.h b/projects/stargazer/users_impl.h index 37edef7a..a7af2989 100644 --- a/projects/stargazer/users_impl.h +++ b/projects/stargazer/users_impl.h @@ -41,7 +41,7 @@ $Author: faust $ #include "stg/users.h" #include "stg/user.h" #include "stg/tariffs.h" -#include "stg/stg_logger.h" +#include "stg/logger.h" #include "stg/notifer.h" #include "stg/noncopyable.h" #include "actions.h" @@ -56,7 +56,7 @@ typedef std::list::const_iterator const_user_iter; class USERS_IMPL; //----------------------------------------------------------------------------- -class PROPERTY_NOTIFER_IP_BEFORE: public PROPERTY_NOTIFIER_BASE { +/*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); @@ -74,7 +74,7 @@ public: private: USERS_IMPL & users; user_iter user; -}; +};*/ //----------------------------------------------------------------------------- struct USER_TO_DEL { USER_TO_DEL() @@ -104,17 +104,29 @@ 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); + 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; int OpenSearch(); int SearchNext(int handler, USER_PTR * user); + int SearchNext(int handler, USER_IMPL ** user); int CloseSearch(int handler); int Start(); @@ -123,15 +135,13 @@ public: private: 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); 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,8 +154,6 @@ private: std::list users; std::list usersToDelete; - std::list userIPNotifiersBefore; - std::list userIPNotifiersAfter; std::map ipIndex; std::map loginIndex; @@ -167,9 +175,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 +201,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