X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/a903ce1ab463173c9a0af322c4c2f23076d21310..a89812e5bf8b8628bfc37274326cda6ed2f1a936:/projects/stargazer/users_impl.cpp?ds=sidebyside diff --git a/projects/stargazer/users_impl.cpp b/projects/stargazer/users_impl.cpp index c4f63c64..3dd7638b 100644 --- a/projects/stargazer/users_impl.cpp +++ b/projects/stargazer/users_impl.cpp @@ -88,31 +88,54 @@ pthread_mutex_destroy(&mutex); //----------------------------------------------------------------------------- int USERS_IMPL::FindByNameNonLock(const std::string & login, user_iter * user) { -std::map::iterator iter; -iter = loginIndex.find(login); -if (iter != loginIndex.end()) - { - if (user) - *user = iter->second; - return 0; - } -return -1; +const std::map::const_iterator iter(loginIndex.find(login)); +if (iter == loginIndex.end()) + return -1; +if (user) + *user = iter->second; +return 0; +} +//----------------------------------------------------------------------------- +int USERS_IMPL::FindByNameNonLock(const std::string & login, const_user_iter * user) const +{ +const std::map::const_iterator iter(loginIndex.find(login)); +if (iter == loginIndex.end()) + return -1; +if (user) + *user = iter->second; +return 0; } //----------------------------------------------------------------------------- int USERS_IMPL::FindByName(const std::string & login, USER_PTR * user) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); user_iter u; -int res = FindByNameNonLock(login, &u); -if (res) +if (FindByNameNonLock(login, &u)) return -1; *user = &(*u); return 0; } //----------------------------------------------------------------------------- +int USERS_IMPL::FindByName(const std::string & login, CONST_USER_PTR * user) const +{ +STG_LOCKER lock(&mutex); +const_user_iter u; +if (FindByNameNonLock(login, &u)) + return -1; +*user = &(*u); +return 0; +} +//----------------------------------------------------------------------------- +bool USERS_IMPL::Exists(const std::string & login) const +{ +STG_LOCKER lock(&mutex); +const std::map::const_iterator iter(loginIndex.find(login)); +return iter != loginIndex.end(); +} +//----------------------------------------------------------------------------- bool USERS_IMPL::TariffInUse(const std::string & tariffName) const { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); std::list::const_iterator iter; iter = users.begin(); while (iter != users.end()) @@ -126,7 +149,7 @@ return false; //----------------------------------------------------------------------------- int USERS_IMPL::Add(const std::string & login, const ADMIN * admin) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); const PRIV * priv = admin->GetPriv(); if (!priv->userAddDel) @@ -217,7 +240,7 @@ if (!priv->userAddDel) { - STG_LOCKER lock(&mutex, __FILE__, __LINE__); + STG_LOCKER lock(&mutex); if (FindByNameNonLock(login, &u)) { @@ -249,7 +272,7 @@ if (!priv->userAddDel) } { - STG_LOCKER lock(&mutex, __FILE__, __LINE__); + STG_LOCKER lock(&mutex); u->OnDelete(); @@ -270,7 +293,7 @@ bool USERS_IMPL::Authorize(const std::string & login, uint32_t ip, uint32_t enabledDirs, const AUTH * auth) { user_iter iter; -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); if (FindByNameNonLock(login, &iter)) { WriteServLog("Attempt to authorize non-existant user '%s'", login.c_str()); @@ -298,10 +321,12 @@ AddToIPIdx(iter); return true; } //----------------------------------------------------------------------------- -bool USERS_IMPL::Unauthorize(const std::string & login, const AUTH * auth) +bool USERS_IMPL::Unauthorize(const std::string & login, + const AUTH * auth, + const std::string & reason) { user_iter iter; -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); if (FindByNameNonLock(login, &iter)) { WriteServLog("Attempt to unauthorize non-existant user '%s'", login.c_str()); @@ -310,7 +335,7 @@ if (FindByNameNonLock(login, &iter)) uint32_t ip = iter->GetCurrIP(); -iter->Unauthorize(auth); +iter->Unauthorize(auth, reason); if (!iter->GetAuthorized()) DelFromIPIdx(ip); @@ -495,6 +520,8 @@ else } } +std::for_each(users.begin(), users.end(), std::mem_fun_ref(&USER_IMPL::ProcessDailyFee)); + if (settings->GetDayFeeIsLastDay()) { printfd(__FILE__, "DayResetTraff - 2 -\n"); @@ -586,7 +613,7 @@ return 0; //----------------------------------------------------------------------------- void USERS_IMPL::RealDelUser() { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); printfd(__FILE__, "RealDelUser() users to del: %d\n", usersToDelete.size()); @@ -621,7 +648,7 @@ uint32_t ip = user->GetCurrIP(); if (!ip) return; // User has disconnected -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); const std::map::iterator it( ipIndex.lower_bound(ip) @@ -637,7 +664,7 @@ void USERS_IMPL::DelFromIPIdx(uint32_t ip) printfd(__FILE__, "USERS: Del IP Idx\n"); assert(ip && "User has non-null ip"); -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); const std::map::iterator it( ipIndex.find(ip) @@ -660,7 +687,7 @@ return true; //----------------------------------------------------------------------------- int USERS_IMPL::FindByIPIdx(uint32_t ip, USER_PTR * usr) const { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); user_iter iter; if (FindByIPIdx(ip, iter)) @@ -674,7 +701,7 @@ return -1; //----------------------------------------------------------------------------- int USERS_IMPL::FindByIPIdx(uint32_t ip, USER_IMPL ** usr) const { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); user_iter iter; if (FindByIPIdx(ip, iter)) @@ -688,7 +715,7 @@ return -1; //----------------------------------------------------------------------------- bool USERS_IMPL::IsIPInIndex(uint32_t ip) const { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); std::map::const_iterator it(ipIndex.find(ip)); @@ -697,7 +724,7 @@ return it != ipIndex.end(); //----------------------------------------------------------------------------- bool USERS_IMPL::IsIPInUse(uint32_t ip, const std::string & login, CONST_USER_PTR * user) const { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); std::list::const_iterator iter; iter = users.begin(); while (iter != users.end()) @@ -717,55 +744,55 @@ return false; //----------------------------------------------------------------------------- void USERS_IMPL::AddNotifierUserAdd(NOTIFIER_BASE * n) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); onAddNotifiers.insert(n); } //----------------------------------------------------------------------------- void USERS_IMPL::DelNotifierUserAdd(NOTIFIER_BASE * n) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); onAddNotifiers.erase(n); } //----------------------------------------------------------------------------- void USERS_IMPL::AddNotifierUserDel(NOTIFIER_BASE * n) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); onDelNotifiers.insert(n); } //----------------------------------------------------------------------------- void USERS_IMPL::DelNotifierUserDel(NOTIFIER_BASE * n) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); onDelNotifiers.erase(n); } //----------------------------------------------------------------------------- void USERS_IMPL::AddNotifierUserAdd(NOTIFIER_BASE * n) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); onAddNotifiersImpl.insert(n); } //----------------------------------------------------------------------------- void USERS_IMPL::DelNotifierUserAdd(NOTIFIER_BASE * n) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); onAddNotifiersImpl.erase(n); } //----------------------------------------------------------------------------- void USERS_IMPL::AddNotifierUserDel(NOTIFIER_BASE * n) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); onDelNotifiersImpl.insert(n); } //----------------------------------------------------------------------------- void USERS_IMPL::DelNotifierUserDel(NOTIFIER_BASE * n) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); onDelNotifiersImpl.erase(n); } //----------------------------------------------------------------------------- int USERS_IMPL::OpenSearch() { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); handle++; searchDescriptors[handle] = users.begin(); return handle; @@ -782,7 +809,7 @@ int USERS_IMPL::SearchNext(int h, USER_PTR * user) //----------------------------------------------------------------------------- int USERS_IMPL::SearchNext(int h, USER_IMPL ** user) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); if (searchDescriptors.find(h) == searchDescriptors.end()) { @@ -811,7 +838,7 @@ return 0; //----------------------------------------------------------------------------- int USERS_IMPL::CloseSearch(int h) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); if (searchDescriptors.find(h) != searchDescriptors.end()) { searchDescriptors.erase(searchDescriptors.find(h)); @@ -824,13 +851,13 @@ return -1; //----------------------------------------------------------------------------- void USERS_IMPL::AddUserIntoIndexes(user_iter user) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); loginIndex.insert(make_pair(user->GetLogin(), user)); } //----------------------------------------------------------------------------- void USERS_IMPL::DelUserFromIndexes(user_iter user) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); loginIndex.erase(user->GetLogin()); } //-----------------------------------------------------------------------------