]> git.stg.codes - stg.git/blobdiff - projects/stargazer/user_impl.cpp
Change map<std::string, USER_PROPERTY_BASE *> on REGISTRY in USER_PROPERTY_LOGGED
[stg.git] / projects / stargazer / user_impl.cpp
index 13cf0b77dc87cd4c1337c6cefc530db7e728572a..f15b182aaaea9fc756f447209e48b2e6dc19334a 100644 (file)
@@ -525,7 +525,7 @@ ScanMessage();
 return 0;
 }
 //-----------------------------------------------------------------------------
 return 0;
 }
 //-----------------------------------------------------------------------------
-void USER_IMPL::Unauthorize(const AUTH * auth)
+void USER_IMPL::Unauthorize(const AUTH * auth, const std::string & reason)
 {
 STG_LOCKER lock(&mutex, __FILE__, __LINE__);
 /*
 {
 STG_LOCKER lock(&mutex, __FILE__, __LINE__);
 /*
@@ -537,6 +537,7 @@ if (!authorizedBy.erase(auth))
 if (authorizedBy.empty())
     {
     authorizedModificationTime = stgTime;
 if (authorizedBy.empty())
     {
     authorizedModificationTime = stgTime;
+    lastDisconnectReason = reason;
     lastIPForDisconnect = currIP;
     currIP = 0; // DelUser in traffcounter
     return;
     lastIPForDisconnect = currIP;
     currIP = 0; // DelUser in traffcounter
     return;
@@ -671,7 +672,12 @@ if (!fakeDisconnect)
     connected = false;
     }
 
     connected = false;
     }
 
-if (store->WriteUserDisconnect(login, up, down, sessionUpload, sessionDownload, cash, freeMb, reason))
+std::string reasonMessage(reason);
+if (!lastDisconnectReason.empty())
+    reasonMessage += ": " + lastDisconnectReason;
+
+if (store->WriteUserDisconnect(login, up, down, sessionUpload, sessionDownload,
+                               cash, freeMb, reasonMessage))
     {
     WriteServLog("Cannot write disconnect for user %s.", login.c_str());
     WriteServLog("%s", store->GetStrError().c_str());
     {
     WriteServLog("Cannot write disconnect for user %s.", login.c_str());
     WriteServLog("%s", store->GetStrError().c_str());
@@ -815,7 +821,7 @@ if (settings->GetShowFeeInCash() || tariff == NULL)
 return (cash - tariff->GetFee() >= -credit);
 }
 //-----------------------------------------------------------------------------
 return (cash - tariff->GetFee() >= -credit);
 }
 //-----------------------------------------------------------------------------
-std::string USER_IMPL::GetEnabledDirs()
+std::string USER_IMPL::GetEnabledDirs() const
 {
 //STG_LOCKER lock(&mutex, __FILE__, __LINE__);
 
 {
 //STG_LOCKER lock(&mutex, __FILE__, __LINE__);
 
@@ -1247,6 +1253,9 @@ STG_LOCKER lock(&mutex, __FILE__, __LINE__);
 if (passive.ConstData() || tariff == NULL)
     return;
 
 if (passive.ConstData() || tariff == NULL)
     return;
 
+if (tariff->GetPeriod() != TARIFF::MONTH)
+    return;
+
 double fee = tariff->GetFee() / DaysInCurrentMonth();
 
 if (std::fabs(fee) < 1.0e-3)
 double fee = tariff->GetFee() / DaysInCurrentMonth();
 
 if (std::fabs(fee) < 1.0e-3)
@@ -1281,6 +1290,9 @@ STG_LOCKER lock(&mutex, __FILE__, __LINE__);
 if (tariff == NULL)
     return;
 
 if (tariff == NULL)
     return;
 
+if (tariff->GetPeriod() != TARIFF::MONTH)
+    return;
+
 double passiveTimePart = 1.0;
 if (!settings->GetFullFee())
     {
 double passiveTimePart = 1.0;
 if (!settings->GetFullFee())
     {
@@ -1342,6 +1354,39 @@ switch (settings->GetFeeChargeType())
     }
 }
 //-----------------------------------------------------------------------------
     }
 }
 //-----------------------------------------------------------------------------
+void USER_IMPL::ProcessDailyFee()
+{
+STG_LOCKER lock(&mutex, __FILE__, __LINE__);
+
+if (passive.ConstData() || tariff == NULL)
+    return;
+
+if (tariff->GetPeriod() != TARIFF::DAY)
+    return;
+
+double fee = tariff->GetFee();
+
+if (fee == 0.0)
+    return;
+
+double c = cash;
+switch (settings->GetFeeChargeType())
+    {
+    case 0:
+        property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
+        break;
+    case 1:
+        if (c + credit >= 0)
+            property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
+        break;
+    case 2:
+        if (c + credit >= fee)
+            property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
+        break;
+    }
+ResetPassiveTime();
+}
+//-----------------------------------------------------------------------------
 void USER_IMPL::SetPrepaidTraff()
 {
 if (tariff != NULL)
 void USER_IMPL::SetPrepaidTraff()
 {
 if (tariff != NULL)
@@ -1466,39 +1511,23 @@ while (it != messages.end())
 //-----------------------------------------------------------------------------
 std::string USER_IMPL::GetParamValue(const std::string & name) const
 {
 //-----------------------------------------------------------------------------
 std::string USER_IMPL::GetParamValue(const std::string & name) const
 {
-if (name == "freeMb")       return property.freeMb.ToString();
-if (name == "passive")      return property.passive.ToString();
-if (name == "disabled")     return property.disabled.ToString();
-if (name == "alwaysOnline") return property.alwaysOnline.ToString();
-if (name == "tariffName")   return property.tariffName;
-if (name == "nextTariff")   return property.nextTariff;
-if (name == "address")      return property.address;
-if (name == "note")         return property.note;
-if (name == "group")        return property.group;
-if (name == "email")        return property.email;
-if (name == "phone")        return property.phone;
-if (name == "realName")     return property.realName;
-if (name == "credit")       return property.credit.ToString();
-if (name == "userdata0")    return property.userdata0;
-if (name == "userdata1")    return property.userdata1;
-if (name == "userdata2")    return property.userdata2;
-if (name == "userdata3")    return property.userdata3;
-if (name == "userdata4")    return property.userdata4;
-if (name == "userdata5")    return property.userdata5;
-if (name == "userdata6")    return property.userdata6;
-if (name == "userdata7")    return property.userdata7;
-if (name == "userdata8")    return property.userdata8;
-if (name == "userdata9")    return property.userdata9;
-if (name == "cash")         return property.cash.ToString();
-if (name == "id")
-    {
-    std::stringstream stream;
-    stream << id;
-    return stream.str();;
-    }
-if (name == "login")        return login;
-if (name == "ip")           return currIP.ToString();
-return "";
+    std::string lowerName = ToLower(name);
+    if (lowerName == "id")
+        {
+        std::ostringstream stream;
+        stream << id;
+        return stream.str();
+        }
+    if (lowerName == "login")       return login;
+    if (lowerName == "currip")      return currIP.ToString();
+    if (lowerName == "enableddirs") return GetEnabledDirs();
+    if (property.Exists(lowerName))
+        return property.GetPropertyValue(lowerName);
+    else
+        {
+        WriteServLog("User’s parameter '%s' does not exist.", name.c_str());
+        return "";
+        }
 }
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 }
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------