X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/a500fb72810060e52d87ad2c2e4691531f0bcc5a..ee1709cd231588fe672d0bd2546ef69ee87ff88c:/projects/stargazer/users_impl.h diff --git a/projects/stargazer/users_impl.h b/projects/stargazer/users_impl.h index 5aa2a494..b5a37063 100644 --- a/projects/stargazer/users_impl.h +++ b/projects/stargazer/users_impl.h @@ -41,8 +41,6 @@ #include "stg/logger.h" #include "stg/notifer.h" #include "stg/noncopyable.h" -#include "actions.h" -#include "eventloop.h" #include "settings_impl.h" #include "user_impl.h" @@ -66,110 +64,101 @@ std::list::iterator iter; time_t delTime; }; //----------------------------------------------------------------------------- -class UsersImpl : public Users { +class UsersImpl : public Users +{ friend class PROPERTY_NOTIFER_IP_BEFORE; friend class PROPERTY_NOTIFER_IP_AFTER; -public: - using UserImplPtr = UserImpl*; - - UsersImpl(SettingsImpl * s, Store * store, - Tariffs * tariffs, Services & svcs, - const Admin& sysAdmin); - virtual ~UsersImpl(); - - int FindByName(const std::string & login, UserPtr * user) override; - int FindByName(const std::string & login, ConstUserPtr * user) const override; - bool Exists(const std::string & login) const override; - - bool TariffInUse(const std::string & tariffName) const override; + public: + using UserImplPtr = UserImpl*; - void AddNotifierUserAdd(NotifierBase *) override; - void DelNotifierUserAdd(NotifierBase *) override; + UsersImpl(SettingsImpl * s, Store * store, + Tariffs * tariffs, Services & svcs, + const Admin& sysAdmin); - void AddNotifierUserDel(NotifierBase *) override; - void DelNotifierUserDel(NotifierBase *) override; + int FindByName(const std::string & login, UserPtr * user) override; + int FindByName(const std::string & login, ConstUserPtr * user) const override; + bool Exists(const std::string & login) const override; - void AddNotifierUserAdd(NotifierBase *); - void DelNotifierUserAdd(NotifierBase *); + bool TariffInUse(const std::string & tariffName) const override; - void AddNotifierUserDel(NotifierBase *); - void DelNotifierUserDel(NotifierBase *); + template + auto onUserImplAdd(F&& f) { return m_onAddImplCallbacks.add(std::forward(f)); } + template + auto onUserImplDel(F&& f) { return m_onDelImplCallbacks.add(std::forward(f)); } - int Add(const std::string & login, const Admin * admin) override; - void Del(const std::string & login, const Admin * admin) override; + int Add(const std::string & login, const Admin * admin) override; + void Del(const std::string & login, const Admin * admin) override; - bool Authorize(const std::string & login, uint32_t ip, - uint32_t enabledDirs, const Auth * auth) override; - bool Unauthorize(const std::string & login, - const Auth * auth, - const std::string & reason) override; + bool Authorize(const std::string & login, uint32_t ip, + uint32_t enabledDirs, const Auth * auth) override; + bool Unauthorize(const std::string & login, + const Auth * auth, + const std::string & reason) override; - int ReadUsers() override; - size_t Count() const override { return users.size(); } + int ReadUsers() override; + size_t Count() const override { return users.size(); } - int FindByIPIdx(uint32_t ip, UserPtr * user) const override; - int FindByIPIdx(uint32_t ip, UserImpl ** user) const; - bool IsIPInIndex(uint32_t ip) const override; - bool IsIPInUse(uint32_t ip, const std::string & login, ConstUserPtr * user) const override; + int FindByIPIdx(uint32_t ip, UserPtr * user) const override; + int FindByIPIdx(uint32_t ip, UserImpl ** user) const; + bool IsIPInIndex(uint32_t ip) const override; + bool IsIPInUse(uint32_t ip, const std::string & login, ConstUserPtr * user) const override; - int OpenSearch() override; - int SearchNext(int handler, UserPtr * user) override; - int SearchNext(int handler, UserImpl ** user); - int CloseSearch(int handler) override; + unsigned int OpenSearch() override; + int SearchNext(int handler, UserPtr * user) override; + int SearchNext(int handler, UserImpl ** user); + int CloseSearch(int handler) override; - int Start() override; - int Stop() override; + int Start() override; + int Stop() override; -private: - UsersImpl(const UsersImpl & rvalue); - UsersImpl & operator=(const UsersImpl & rvalue); + private: + UsersImpl(const UsersImpl & rvalue); + UsersImpl & operator=(const UsersImpl & rvalue); - void AddToIPIdx(user_iter user); - void DelFromIPIdx(uint32_t ip); - bool FindByIPIdx(uint32_t ip, user_iter & iter) const; + 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; + bool FindByNameNonLock(const std::string & login, user_iter * user); + bool FindByNameNonLock(const std::string & login, const_user_iter * user) const; - void RealDelUser(); - void ProcessActions(); + void RealDelUser(); + void ProcessActions(); - void AddUserIntoIndexes(user_iter user); - void DelUserFromIndexes(user_iter user); + void AddUserIntoIndexes(user_iter user); + void DelUserFromIndexes(user_iter user); - void Run(std::stop_token token); - void NewMinute(const struct tm & t); - void NewDay(const struct tm & t); - void DayResetTraff(const struct tm & t); + void Run(std::stop_token token); + void NewMinute(const struct tm & t); + void NewDay(const struct tm & t); + void DayResetTraff(const struct tm & t); - bool TimeToWriteDetailStat(const struct tm & t); + bool TimeToWriteDetailStat(const struct tm & t); - std::list users; - std::list usersToDelete; + std::list users; + std::list usersToDelete; - std::map ipIndex; - std::map loginIndex; + std::map ipIndex; + std::map loginIndex; - SettingsImpl * settings; - Tariffs * tariffs; - Services & m_services; - Store * store; - const Admin& sysAdmin; - Logger & WriteServLog; + SettingsImpl * settings; + Tariffs * m_tariffs; + Services & m_services; + Store * m_store; + const Admin& m_sysAdmin; + Logger & WriteServLog; - bool isRunning; + bool isRunning; - mutable std::mutex m_mutex; - std::jthread m_thread; - mutable unsigned int handle; + mutable std::mutex m_mutex; + std::jthread m_thread; + mutable unsigned int handle; - mutable std::map searchDescriptors; + mutable std::map searchDescriptors; - std::set*> onAddNotifiers; - std::set*> onDelNotifiers; - std::set*> onAddNotifiersImpl; - std::set*> onDelNotifiersImpl; + Subscriptions m_onAddImplCallbacks; + Subscriptions m_onDelImplCallbacks; }; }