]> git.stg.codes - stg.git/commitdiff
Merge branch 'naffanya-dev'
authorMaxim Mamontov <faust.madf@gmail.com>
Sun, 8 Jun 2014 19:06:32 +0000 (22:06 +0300)
committerMaxim Mamontov <faust.madf@gmail.com>
Fri, 9 Jan 2015 20:08:55 +0000 (22:08 +0200)
include/stg/user.h
include/stg/user_property.h
include/stg/users.h
projects/stargazer/main.cpp
projects/stargazer/plugins/other/rscript/rscript.cpp
projects/stargazer/plugins/other/rscript/rscript.h
projects/stargazer/user_impl.cpp
projects/stargazer/user_impl.h
projects/stargazer/user_property.cpp

index a8f61105ec3adb3e04cf64be201615703d2d2189..8dc761e35acfb21932c97676faf1cd4dde379915 100644 (file)
@@ -98,7 +98,7 @@ public:
     virtual time_t              GetLastWriteStatTime() const = 0;
 
     virtual bool                IsInetable() = 0;
-    virtual std::string         GetEnabledDirs() = 0;
+    virtual std::string         GetEnabledDirs() const = 0;
 
     virtual void                OnAdd() = 0;
     virtual void                OnDelete() = 0;
index 1716296acd7300482c53f3014c41d7f13869574d..97c1af51b7335adeb235422dd3043e847bdeb2dc 100644 (file)
@@ -12,12 +12,14 @@ $Author: faust $
 #include <ctime>
 #include <string>
 #include <set>
+#include <map>
 #include <sstream>
 #include <iostream>
 
 #include "stg/logger.h"
 #include "stg/locker.h"
 #include "stg/scriptexecuter.h"
+#include "stg/common.h"
 
 #include "store.h"
 #include "admin.h"
@@ -25,10 +27,16 @@ $Author: faust $
 #include "noncopyable.h"
 
 extern volatile time_t stgTime;
-
+//-----------------------------------------------------------------------------
+class USER_PROPERTY_BASE {
+public:
+    virtual std::string ToString() const = 0;
+};
+//-----------------------------------------------------------------------------
+typedef std::map<std::string, USER_PROPERTY_BASE *> REGISTRY;
 //-----------------------------------------------------------------------------
 template<typename varT>
-class USER_PROPERTY {
+class USER_PROPERTY : public USER_PROPERTY_BASE {
 public:
     USER_PROPERTY(varT & val);
     virtual ~USER_PROPERTY();
@@ -68,7 +76,8 @@ public:
                          bool isPassword,
                          bool isStat,
                          STG_LOGGER & logger,
-                         const std::string & sd);
+                         const std::string & sd,
+                         REGISTRY & properties);
     virtual ~USER_PROPERTY_LOGGED() {}
 
     USER_PROPERTY_LOGGED<varT> * GetPointer() throw() { return this; }
@@ -118,6 +127,7 @@ private:
     USER_STAT stat;
     USER_CONF conf;
 
+    REGISTRY properties;
 public:
     USER_PROPERTIES(const std::string & sd);
 
@@ -130,6 +140,9 @@ public:
 
     void SetProperties(const USER_PROPERTIES & p) { stat = p.stat; conf = p.conf; }
 
+    std::string GetPropertyValue(const std::string & name) const;
+    bool Exists(const std::string & name) const;
+
     USER_PROPERTY_LOGGED<double>            cash;
     USER_PROPERTY_LOGGED<DIR_TRAFF>         up;
     USER_PROPERTY_LOGGED<DIR_TRAFF>         down;
@@ -268,7 +281,8 @@ USER_PROPERTY_LOGGED<varT>::USER_PROPERTY_LOGGED(varT & val,
                                                  bool isPass,
                                                  bool isSt,
                                                  STG_LOGGER & logger,
-                                                 const std::string & sd)
+                                                 const std::string & sd,
+                                                 REGISTRY & properties)
 
     : USER_PROPERTY<varT>(val),
       stgLogger(logger),
@@ -277,6 +291,7 @@ USER_PROPERTY_LOGGED<varT>::USER_PROPERTY_LOGGED(varT & val,
       name(n),
       scriptsDir(sd)
 {
+properties.insert(std::make_pair(ToLower(name), this));
 }
 //-------------------------------------------------------------------------
 template <typename varT>
@@ -376,6 +391,23 @@ else
 //-------------------------------------------------------------------------
 //-------------------------------------------------------------------------
 //-------------------------------------------------------------------------
+inline
+std::string USER_PROPERTIES::GetPropertyValue(const std::string & name) const
+{
+REGISTRY::const_iterator it = properties.find(ToLower(name));
+if (it == properties.end())
+    return "";
+return it->second->ToString();
+}
+//-----------------------------------------------------------------------------
+inline
+bool USER_PROPERTIES::Exists(const std::string & name) const
+{
+return properties.find(ToLower(name)) != properties.end();
+}
+//-------------------------------------------------------------------------
+//-------------------------------------------------------------------------
+//-------------------------------------------------------------------------
 template<typename varT>
 inline
 std::ostream & operator<< (std::ostream & stream, const USER_PROPERTY<varT> & value)
@@ -384,9 +416,10 @@ return stream << value.ConstData();
 }
 //-----------------------------------------------------------------------------
 template<typename varT>
+inline
 std::string USER_PROPERTY<varT>::ToString() const
 {
-std::stringstream stream;
+std::ostringstream stream;
 stream << value;
 return stream.str();
 }
index 1a8d7a4379bff76d74b685dea039fcf3057aa44e..9f516aef877358c1d3d3537423c1d7b2d615f2c3 100644 (file)
@@ -64,7 +64,6 @@ public:
 
     virtual int  Start() = 0;
     virtual int  Stop() = 0;
-
 };
 
 #endif
index 1e4c677e255133503bbc25c61721874cf3891d95..200fd2a664e15f46e1d2228b20ba6f4db509bdd3 100644 (file)
@@ -271,6 +271,7 @@ if (settings->ReadSettings())
     WriteServLog("ReadSettings error. %s", settings->GetStrError().c_str());
     exit(1);
     }
+
 #ifndef NO_DAEMON
 std::string startFile(settings->GetConfDir() + START_FILE);
 #endif
index 3bc90792276152606e274fb5258b2554ff956198..e781a8cb91532f3d976a5f9d5fdc478ff7586616 100644 (file)
@@ -429,9 +429,12 @@ for(it = rsSettings.GetUserParams().begin();
     it != rsSettings.GetUserParams().end();
     ++it)
     {
-    std::string parameter(GetUserParam(rsu.user, *it));
+    std::string parameter(rsu.user->GetParamValue(it->c_str()));
     if (params.length() + parameter.length() > RS_PARAMS_LEN - 1)
+    {
+        logger("Script params string length %d exceeds the limit of %d symbols.", params.length() + parameter.length(), RS_PARAMS_LEN);
         break;
+    }
     params += parameter + " ";
     }
 strncpy((char *)packetTail.params, params.c_str(), RS_PARAMS_LEN);
@@ -518,86 +521,6 @@ for (size_t i = 0; i < netRouters.size(); ++i)
 return std::vector<uint32_t>();
 }
 //-----------------------------------------------------------------------------
-std::string REMOTE_SCRIPT::GetUserParam(USER_PTR u, const std::string & paramName) const
-{
-std::string value = "";
-if (strcasecmp(paramName.c_str(), "cash") == 0)
-    strprintf(&value, "%f", u->GetProperty().cash.Get());
-else
-if (strcasecmp(paramName.c_str(), "freeMb") == 0)
-    strprintf(&value, "%f", u->GetProperty().freeMb.Get());
-else
-if (strcasecmp(paramName.c_str(), "passive") == 0)
-    strprintf(&value, "%d", u->GetProperty().passive.Get());
-else
-if (strcasecmp(paramName.c_str(), "disabled") == 0)
-    strprintf(&value, "%d", u->GetProperty().disabled.Get());
-else
-if (strcasecmp(paramName.c_str(), "alwaysOnline") == 0)
-    strprintf(&value, "%d", u->GetProperty().alwaysOnline.Get());
-else
-if (strcasecmp(paramName.c_str(), "tariffName") == 0 ||
-    strcasecmp(paramName.c_str(), "tariff") == 0)
-    value = "\"" + u->GetProperty().tariffName.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "nextTariff") == 0)
-    value = "\"" + u->GetProperty().nextTariff.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "address") == 0)
-    value = "\"" + u->GetProperty().address.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "note") == 0)
-    value = "\"" + u->GetProperty().note.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "group") == 0)
-    value = "\"" + u->GetProperty().group.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "email") == 0)
-    value = "\"" + u->GetProperty().email.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "realName") == 0)
-    value = "\"" + u->GetProperty().realName.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "credit") == 0)
-    strprintf(&value, "%f", u->GetProperty().credit.Get());
-else
-if (strcasecmp(paramName.c_str(), "userdata0") == 0)
-    value = "\"" + u->GetProperty().userdata0.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "userdata1") == 0)
-    value = "\"" + u->GetProperty().userdata1.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "userdata2") == 0)
-    value = "\"" + u->GetProperty().userdata2.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "userdata3") == 0)
-    value = "\"" + u->GetProperty().userdata3.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "userdata4") == 0)
-    value = "\"" + u->GetProperty().userdata4.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "userdata5") == 0)
-    value = "\"" + u->GetProperty().userdata5.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "userdata6") == 0)
-    value = "\"" + u->GetProperty().userdata6.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "userdata7") == 0)
-    value = "\"" + u->GetProperty().userdata7.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "userdata8") == 0)
-    value = "\"" + u->GetProperty().userdata8.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "userdata9") == 0)
-    value = "\"" + u->GetProperty().userdata9.Get() + "\"";
-else
-if (strcasecmp(paramName.c_str(), "enabledDirs") == 0)
-    value = u->GetEnabledDirs();
-else
-    printfd(__FILE__, "Unknown value name: %s\n", paramName.c_str());
-return value;
-}
-//-----------------------------------------------------------------------------
 void REMOTE_SCRIPT::SetUserNotifiers(USER_PTR u)
 {
 ipNotifierList.push_front(RS::IP_NOTIFIER(*this, u));
index 8d22b458c870d72fba63ea61f3f7651134389ca7..bc6aa92f772f4375453c2f669100a318572f1bc7 100644 (file)
@@ -213,7 +213,6 @@ private:
 
     std::vector<uint32_t> IP2Routers(uint32_t ip);
     bool                GetUsers();
-    std::string         GetUserParam(USER_PTR u, const std::string & paramName) const;
 
     void                SetUserNotifiers(USER_PTR u);
     void                UnSetUserNotifiers(USER_PTR u);
index 3b2489ad319bc1d660d089f4f5a0b2bf4264e93f..47f352284a1a96ed2bb2b4cbe0d240909dede687 100644 (file)
@@ -821,7 +821,7 @@ if (settings->GetShowFeeInCash() || tariff == NULL)
 return (cash - tariff->GetFee() >= -credit);
 }
 //-----------------------------------------------------------------------------
-std::string USER_IMPL::GetEnabledDirs()
+std::string USER_IMPL::GetEnabledDirs() const
 {
 //STG_LOCKER lock(&mutex, __FILE__, __LINE__);
 
@@ -1511,39 +1511,24 @@ while (it != messages.end())
 //-----------------------------------------------------------------------------
 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 (lowerName == "tariff")      return property.tariffName;
+    if (property.Exists(lowerName))
+        return property.GetPropertyValue(lowerName);
+    else
+        {
+        WriteServLog("User’s parameter '%s' does not exist.", name.c_str());
+        return "";
+        }
 }
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
index 150f2a8bcf1fe8de324127b391f87f46c852e5e2..5b51fc5d040f4441c80d2b2ef124e5efe6c19d6d 100644 (file)
@@ -218,7 +218,7 @@ public:
     void            ProcessDailyFee();
 
     bool            IsInetable();
-    std::string     GetEnabledDirs();
+    std::string     GetEnabledDirs() const;
 
     void            OnAdd();
     void            OnDelete();
index f5f5eeeacbec868cae7f2c5be6ed5289893a77e6..c8b589172a95a3380848770d3f6c78457d9ccbe3 100644 (file)
@@ -3,40 +3,39 @@
 USER_PROPERTIES::USER_PROPERTIES(const std::string & sd)
     : stat(),
       conf(),
-      cash            (stat.cash,             "cash",             false, true, GetStgLogger(), sd),
-      up              (stat.monthUp,          "upload",           false, true, GetStgLogger(), sd),
-      down            (stat.monthDown,        "download",         false, true, GetStgLogger(), sd),
-      lastCashAdd     (stat.lastCashAdd,      "lastCashAdd",      false, true, GetStgLogger(), sd),
-      passiveTime     (stat.passiveTime,      "passiveTime",      false, true, GetStgLogger(), sd),
-      lastCashAddTime (stat.lastCashAddTime,  "lastCashAddTime",  false, true, GetStgLogger(), sd),
-      freeMb          (stat.freeMb,           "freeMb",           false, true, GetStgLogger(), sd),
-      lastActivityTime(stat.lastActivityTime, "lastActivityTime", false, true, GetStgLogger(), sd),
+      cash            (stat.cash,             "cash",             false, true, GetStgLogger(), sd, properties),
+      up              (stat.monthUp,          "upload",           false, true, GetStgLogger(), sd, properties),
+      down            (stat.monthDown,        "download",         false, true, GetStgLogger(), sd, properties),
+      lastCashAdd     (stat.lastCashAdd,      "lastCashAdd",      false, true, GetStgLogger(), sd, properties),
+      passiveTime     (stat.passiveTime,      "passiveTime",      false, true, GetStgLogger(), sd, properties),
+      lastCashAddTime (stat.lastCashAddTime,  "lastCashAddTime",  false, true, GetStgLogger(), sd, properties),
+      freeMb          (stat.freeMb,           "freeMb",           false, true, GetStgLogger(), sd, properties),
+      lastActivityTime(stat.lastActivityTime, "lastActivityTime", false, true, GetStgLogger(), sd, properties),
 
-
-      password    (conf.password,     "password",     true,  false, GetStgLogger(), sd),
-      passive     (conf.passive,      "passive",      false, false, GetStgLogger(), sd),
-      disabled    (conf.disabled,     "disabled",     false, false, GetStgLogger(), sd),
-      disabledDetailStat(conf.disabledDetailStat, "DisabledDetailStat", false, false, GetStgLogger(), sd),
-      alwaysOnline(conf.alwaysOnline, "alwaysOnline", false, false, GetStgLogger(), sd),
-      tariffName  (conf.tariffName,   "tariff",       false, false, GetStgLogger(), sd),
-      nextTariff  (conf.nextTariff,   "new tariff",   false, false, GetStgLogger(), sd),
-      address     (conf.address,      "address",      false, false, GetStgLogger(), sd),
-      note        (conf.note,         "note",         false, false, GetStgLogger(), sd),
-      group       (conf.group,        "group",        false, false, GetStgLogger(), sd),
-      email       (conf.email,        "email",        false, false, GetStgLogger(), sd),
-      phone       (conf.phone,        "phone",        false, false, GetStgLogger(), sd),
-      realName    (conf.realName,     "realName",     false, false, GetStgLogger(), sd),
-      credit      (conf.credit,       "credit",       false, false, GetStgLogger(), sd),
-      creditExpire(conf.creditExpire, "creditExpire", false, false, GetStgLogger(), sd),
-      ips         (conf.ips,          "IP",           false, false, GetStgLogger(), sd),
-      userdata0   (conf.userdata[0],  "userdata0",    false, false, GetStgLogger(), sd),
-      userdata1   (conf.userdata[1],  "userdata1",    false, false, GetStgLogger(), sd),
-      userdata2   (conf.userdata[2],  "userdata2",    false, false, GetStgLogger(), sd),
-      userdata3   (conf.userdata[3],  "userdata3",    false, false, GetStgLogger(), sd),
-      userdata4   (conf.userdata[4],  "userdata4",    false, false, GetStgLogger(), sd),
-      userdata5   (conf.userdata[5],  "userdata5",    false, false, GetStgLogger(), sd),
-      userdata6   (conf.userdata[6],  "userdata6",    false, false, GetStgLogger(), sd),
-      userdata7   (conf.userdata[7],  "userdata7",    false, false, GetStgLogger(), sd),
-      userdata8   (conf.userdata[8],  "userdata8",    false, false, GetStgLogger(), sd),
-      userdata9   (conf.userdata[9],  "userdata9",    false, false, GetStgLogger(), sd)
+      password    (conf.password,     "password",     true,  false, GetStgLogger(), sd, properties),
+      passive     (conf.passive,      "passive",      false, false, GetStgLogger(), sd, properties),
+      disabled    (conf.disabled,     "disabled",     false, false, GetStgLogger(), sd, properties),
+      disabledDetailStat(conf.disabledDetailStat, "DisabledDetailStat", false, false, GetStgLogger(), sd, properties),
+      alwaysOnline(conf.alwaysOnline, "alwaysOnline", false, false, GetStgLogger(), sd, properties),
+      tariffName  (conf.tariffName,   "tariffName",   false, false, GetStgLogger(), sd, properties),
+      nextTariff  (conf.nextTariff,   "nextTariff",   false, false, GetStgLogger(), sd, properties),
+      address     (conf.address,      "address",      false, false, GetStgLogger(), sd, properties),
+      note        (conf.note,         "note",         false, false, GetStgLogger(), sd, properties),
+      group       (conf.group,        "group",        false, false, GetStgLogger(), sd, properties),
+      email       (conf.email,        "email",        false, false, GetStgLogger(), sd, properties),
+      phone       (conf.phone,        "phone",        false, false, GetStgLogger(), sd, properties),
+      realName    (conf.realName,     "realName",     false, false, GetStgLogger(), sd, properties),
+      credit      (conf.credit,       "credit",       false, false, GetStgLogger(), sd, properties),
+      creditExpire(conf.creditExpire, "creditExpire", false, false, GetStgLogger(), sd, properties),
+      ips         (conf.ips,          "ips",          false, false, GetStgLogger(), sd, properties),
+      userdata0   (conf.userdata[0],  "userdata0",    false, false, GetStgLogger(), sd, properties),
+      userdata1   (conf.userdata[1],  "userdata1",    false, false, GetStgLogger(), sd, properties),
+      userdata2   (conf.userdata[2],  "userdata2",    false, false, GetStgLogger(), sd, properties),
+      userdata3   (conf.userdata[3],  "userdata3",    false, false, GetStgLogger(), sd, properties),
+      userdata4   (conf.userdata[4],  "userdata4",    false, false, GetStgLogger(), sd, properties),
+      userdata5   (conf.userdata[5],  "userdata5",    false, false, GetStgLogger(), sd, properties),
+      userdata6   (conf.userdata[6],  "userdata6",    false, false, GetStgLogger(), sd, properties),
+      userdata7   (conf.userdata[7],  "userdata7",    false, false, GetStgLogger(), sd, properties),
+      userdata8   (conf.userdata[8],  "userdata8",    false, false, GetStgLogger(), sd, properties),
+      userdata9   (conf.userdata[9],  "userdata9",    false, false, GetStgLogger(), sd, properties)
 {}