From: Maxim Mamontov <faust@stg.dp.ua>
Date: Fri, 23 Aug 2013 18:59:58 +0000 (+0300)
Subject: Merge branch 'naffanya-dev'
X-Git-Url: https://git.stg.codes/stg.git/commitdiff_plain/e9cb0683c0b33d8458c1d9b2558bbeb5d101e680?hp=-c

Merge branch 'naffanya-dev'
---

e9cb0683c0b33d8458c1d9b2558bbeb5d101e680
diff --combined include/stg/user.h
index 44d3e5b2,365c71ef..a8f61105
--- a/include/stg/user.h
+++ b/include/stg/user.h
@@@ -21,16 -21,14 +21,16 @@@
  #ifndef USER_H
  #define USER_H
  
 -#include <ctime>
 -#include <string>
 -
 -#include "os_int.h"
  #include "notifer.h"
  #include "message.h"
  #include "tariff.h"
  #include "user_traff.h"
 +#include "os_int.h"
 +
 +#include <vector>
 +#include <string>
 +
 +#include <ctime>
  
  class USER_PROPERTIES;
  class AUTH;
@@@ -73,12 -71,12 +73,12 @@@ public
  
      virtual bool                GetConnected() const = 0;
      virtual time_t              GetConnectedModificationTime() const = 0;
 +    virtual const std::string & GetLastDisconnectReason() const = 0;
      virtual int                 GetAuthorized() const = 0;
 -    /*virtual int                 Authorize(uint32_t ip,
 -                                          uint32_t enabledDirs,
 -                                          const AUTH * auth) = 0;
 -    virtual void                Unauthorize(const AUTH * auth) = 0;*/
 +    virtual time_t              GetAuthorizedModificationTime() const = 0;
 +
      virtual bool                IsAuthorizedBy(const AUTH * auth) const = 0;
 +    virtual std::vector<std::string> GetAuthorizers() const = 0;
  
      virtual int                 AddMessage(STG_MSG * msg) = 0;
  
@@@ -102,6 -100,8 +102,8 @@@
  
      virtual void                OnAdd() = 0;
      virtual void                OnDelete() = 0;
+ 
+     virtual std::string GetParamValue(const std::string & name) const = 0;
  };
  
  typedef USER * USER_PTR;
diff --combined include/stg/users.h
index 19a9d7b7,ed9af901..a1d5d295
--- a/include/stg/users.h
+++ b/include/stg/users.h
@@@ -32,7 -32,6 +32,7 @@@ class USERS 
  public:
      virtual ~USERS() {}
      virtual int  FindByName(const std::string & login, USER_PTR * user) = 0;
 +    virtual int  FindByName(const std::string & login, CONST_USER_PTR * user) const = 0;
  
      virtual bool TariffInUse(const std::string & tariffName) const = 0;
  
@@@ -54,7 -53,6 +54,7 @@@
  
      virtual int  FindByIPIdx(uint32_t ip, USER_PTR * user) const = 0;
      virtual bool IsIPInIndex(uint32_t ip) const = 0;
 +    virtual bool IsIPInUse(uint32_t ip, const std::string & login, CONST_USER_PTR * user) const = 0;
  
      virtual int  OpenSearch() = 0;
      virtual int  SearchNext(int handle, USER_PTR * u) = 0;
@@@ -62,6 -60,7 +62,7 @@@
  
      virtual int  Start() = 0;
      virtual int  Stop() = 0;
+ 
  };
  
  #endif
diff --combined projects/stargazer/main.cpp
index 11fad552,b7bb91f5..7cc8eccc
--- a/projects/stargazer/main.cpp
+++ b/projects/stargazer/main.cpp
@@@ -106,7 -106,7 +106,7 @@@ els
      }
  }
  //-----------------------------------------------------------------------------
 -#ifdef LINUX
 +#if defined(LINUX) || defined(DARWIN)
  int StartScriptExecuter(char * procName, int msgKey, int * msgID, SETTINGS_IMPL * settings)
  #else
  int StartScriptExecuter(char *, int msgKey, int * msgID, SETTINGS_IMPL * settings)
@@@ -151,7 -151,7 +151,7 @@@ switch (executerPid
  
      case 0:
          delete settings;
 -#ifdef LINUX
 +#if defined(LINUX) || defined(DARWIN)
          Executer(*msgID, executerPid, procName);
  #else
          Executer(*msgID, executerPid);
@@@ -160,7 -160,7 +160,7 @@@
  
      default:
          if (executersPid.empty()) {
 -#ifdef LINUX
 +#if defined(LINUX) || defined(DARWIN)
              Executer(*msgID, executerPid, NULL);
  #else
              Executer(*msgID, executerPid);
@@@ -271,7 -271,6 +271,6 @@@ if (settings->ReadSettings()
      WriteServLog("ReadSettings error. %s", settings->GetStrError().c_str());
      exit(1);
      }
- 
  #ifndef NO_DAEMON
  std::string startFile(settings->GetConfDir() + START_FILE);
  #endif
diff --combined projects/stargazer/user_impl.cpp
index 4f216b06,52731b7b..13cf0b77
--- a/projects/stargazer/user_impl.cpp
+++ b/projects/stargazer/user_impl.cpp
@@@ -32,9 -32,12 +32,9 @@@
  #define _GNU_SOURCE
  #endif
  
 -#include <pthread.h>
 -#include <unistd.h> // access
 -
 -#include <cassert>
 -#include <cstdlib>
 -#include <cmath>
 +#include "user_impl.h"
 +#include "settings_impl.h"
 +#include "stg_timer.h"
  
  #include "stg/users.h"
  #include "stg/common.h"
@@@ -42,16 -45,9 +42,16 @@@
  #include "stg/tariff.h"
  #include "stg/tariffs.h"
  #include "stg/admin.h"
 -#include "user_impl.h"
 -#include "settings_impl.h"
 -#include "stg_timer.h"
 +
 +#include <algorithm>
 +#include <functional>
 +
 +#include <cassert>
 +#include <cstdlib>
 +#include <cmath>
 +
 +#include <pthread.h>
 +#include <unistd.h> // access
  
  #ifdef USE_ABSTRACT_SETTINGS
  USER_IMPL::USER_IMPL(const SETTINGS * s,
@@@ -64,9 -60,12 +64,9 @@@
        property(s->GetScriptsDir()),
        WriteServLog(GetStgLogger()),
        lastScanMessages(0),
 -      login(),
        id(0),
        __connected(0),
        connected(__connected),
 -      enabledDirs(),
 -      userIDGenerator(),
        __currIP(0),
        currIP(__currIP),
        lastIPForDisconnect(0),
@@@ -75,8 -74,11 +75,8 @@@
        store(st),
        tariffs(t),
        tariff(NULL),
 -      traffStat(),
 -      traffStatSaved(),
        settings(s),
 -      authorizedBy(),
 -      messages(),
 +      authorizedModificationTime(0),
        deleted(false),
        lastWriteStat(0),
        lastWriteDetailedStat(0),
@@@ -114,10 -116,14 +114,10 @@@
        userdata7(property.userdata7),
        userdata8(property.userdata8),
        userdata9(property.userdata9),
 -      sessionUpload(),
 -      sessionDownload(),
        passiveNotifier(this),
        tariffNotifier(this),
        cashNotifier(this),
 -      ipNotifier(this),
 -      mutex(),
 -      errorStr()
 +      ipNotifier(this)
  {
  password = "*_EMPTY_PASSWORD_*";
  tariffName = NO_TARIFF_NAME;
@@@ -147,9 -153,12 +147,9 @@@ USER_IMPL::USER_IMPL(const SETTINGS_IMP
        property(s->GetScriptsDir()),
        WriteServLog(GetStgLogger()),
        lastScanMessages(0),
 -      login(),
        id(0),
        __connected(0),
        connected(__connected),
 -      enabledDirs(),
 -      userIDGenerator(),
        __currIP(0),
        currIP(__currIP),
        lastIPForDisconnect(0),
@@@ -158,8 -167,11 +158,8 @@@
        store(st),
        tariffs(t),
        tariff(NULL),
 -      traffStat(),
 -      traffStatSaved(),
        settings(s),
 -      authorizedBy(),
 -      messages(),
 +      authorizedModificationTime(0),
        deleted(false),
        lastWriteStat(0),
        lastWriteDetailedStat(0),
@@@ -197,11 -209,15 +197,11 @@@
        userdata7(property.userdata7),
        userdata8(property.userdata8),
        userdata9(property.userdata9),
 -      sessionUpload(),
 -      sessionDownload(),
        passiveNotifier(this),
        disabledNotifier(this),
        tariffNotifier(this),
        cashNotifier(this),
 -      ipNotifier(this),
 -      mutex(),
 -      errorStr()
 +      ipNotifier(this)
  {
  password = "*_EMPTY_PASSWORD_*";
  tariffName = NO_TARIFF_NAME;
@@@ -232,6 -248,7 +232,6 @@@ USER_IMPL::USER_IMPL(const USER_IMPL & 
        id(u.id),
        __connected(0),
        connected(__connected),
 -      enabledDirs(),
        userIDGenerator(u.userIDGenerator),
        __currIP(u.__currIP),
        currIP(__currIP),
@@@ -244,7 -261,7 +244,7 @@@
        traffStat(u.traffStat),
        traffStatSaved(u.traffStatSaved),
        settings(u.settings),
 -      authorizedBy(),
 +      authorizedModificationTime(u.authorizedModificationTime),
        messages(u.messages),
        deleted(u.deleted),
        lastWriteStat(u.lastWriteStat),
@@@ -289,7 -306,9 +289,7 @@@
        disabledNotifier(this),
        tariffNotifier(this),
        cashNotifier(this),
 -      ipNotifier(this),
 -      mutex(),
 -      errorStr()
 +      ipNotifier(this)
  {
  if (&u == this)
      return;
@@@ -516,8 -535,6 +516,8 @@@ els
          }
      }
  
 +if (authorizedBy.empty())
 +    authorizedModificationTime = stgTime;
  authorizedBy.insert(auth);
  
  ScanMessage();
@@@ -536,7 -553,6 +536,7 @@@ if (!authorizedBy.erase(auth)
  
  if (authorizedBy.empty())
      {
 +    authorizedModificationTime = stgTime;
      lastIPForDisconnect = currIP;
      currIP = 0; // DelUser in traffcounter
      return;
@@@ -550,13 -566,6 +550,13 @@@ STG_LOCKER lock(&mutex, __FILE__, __LIN
  return authorizedBy.find(auth) != authorizedBy.end();
  }
  //-----------------------------------------------------------------------------
 +std::vector<std::string> USER_IMPL::GetAuthorizers() const
 +{
 +    std::vector<std::string> list;
 +    std::transform(authorizedBy.begin(), authorizedBy.end(), std::back_inserter(list), std::mem_fun(&AUTH::GetVersion));
 +    return list;
 +}
 +//-----------------------------------------------------------------------------
  void USER_IMPL::Connect(bool fakeConnect)
  {
  /*
@@@ -579,6 -588,7 +579,7 @@@ if (!fakeConnect
              }
  
          std::string scriptOnConnectParams;
+ 
          strprintf(&scriptOnConnectParams,
                  "%s \"%s\" \"%s\" \"%f\" \"%d\" \"%s\"",
                  scriptOnConnect.c_str(),
@@@ -588,6 -598,13 +589,13 @@@
                  id,
                  dirsStr);
  
+         std::vector<std::string>::const_iterator it(settings->GetScriptParams().begin());
+         while (it != settings->GetScriptParams().end())
+             {
+             scriptOnConnectParams += " \"" + GetParamValue(it->c_str()) + "\"";
+             ++it;
+             }
+ 
          ScriptExec(scriptOnConnectParams.c_str());
          }
      else
@@@ -624,7 -641,6 +632,7 @@@ if (!lastIPForDisconnect
  
  if (!fakeDisconnect)
      {
 +    lastDisconnectReason = reason;
      std::string scriptOnDisonnect = settings->GetScriptsDir() + "/OnDisconnect";
  
      if (access(scriptOnDisonnect.c_str(), X_OK) == 0)
@@@ -646,6 -662,13 +654,13 @@@
                  id,
                  dirsStr);
  
+         std::vector<std::string>::const_iterator it(settings->GetScriptParams().begin());
+         while (it != settings->GetScriptParams().end())
+             {
+             scriptOnDisonnectParams += " \"" + GetParamValue(it->c_str()) + "\"";
+             ++it;
+             }
+ 
          ScriptExec(scriptOnDisonnectParams.c_str());
          }
      else
@@@ -1449,6 -1472,43 +1464,43 @@@ 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 "";
+ }
+ //-----------------------------------------------------------------------------
  //-----------------------------------------------------------------------------
  //-----------------------------------------------------------------------------
  void CHG_PASSIVE_NOTIFIER::Notify(const int & oldPassive, const int & newPassive)
diff --combined projects/stargazer/user_impl.h
index 96317f06,d240f0c8..26ff58fc
--- a/projects/stargazer/user_impl.h
+++ b/projects/stargazer/user_impl.h
@@@ -27,7 -27,14 +27,7 @@@
  #ifndef USER_IMPL_H
  #define USER_IMPL_H
  
 -#include <ctime>
 -#include <list>
 -#include <string>
 -#include <set>
 -
  #include "stg/user.h"
 -#include "stg/os_int.h"
 -#include "stg/const.h"
  #include "stg/user_stat.h"
  #include "stg/user_conf.h"
  #include "stg/user_ips.h"
@@@ -35,15 -42,6 +35,15 @@@
  #include "stg/auth.h"
  #include "stg/message.h"
  #include "stg/noncopyable.h"
 +#include "stg/os_int.h"
 +#include "stg/const.h"
 +
 +#include <list>
 +#include <vector>
 +#include <string>
 +#include <set>
 +
 +#include <ctime>
  
  //-----------------------------------------------------------------------------
  class TARIFF;
@@@ -184,13 -182,10 +184,13 @@@ public
  
      bool            GetConnected() const { return connected; }
      time_t          GetConnectedModificationTime() const { return connected.ModificationTime(); }
 +    const std::string & GetLastDisconnectReason() const { return lastDisconnectReason; }
      int             GetAuthorized() const { return static_cast<int>(authorizedBy.size()); }
 +    time_t          GetAuthorizedModificationTime() const { return authorizedModificationTime; }
      int             Authorize(uint32_t ip, uint32_t enabledDirs, const AUTH * auth);
      void            Unauthorize(const AUTH * auth);
      bool            IsAuthorizedBy(const AUTH * auth) const;
 +    std::vector<std::string> GetAuthorizers() const;
  
      int             AddMessage(STG_MSG * msg);
  
@@@ -221,6 -216,8 +221,8 @@@
      void            OnAdd();
      void            OnDelete();
  
+     virtual std::string GetParamValue(const std::string & name) const;
+ 
  private:
      USER_IMPL & operator=(const USER_IMPL & rvalue);
  
@@@ -243,7 -240,6 +245,7 @@@
      int             id;
      bool            __connected;
      USER_PROPERTY<bool> connected;
 +    std::string     lastDisconnectReason;
  
      bool            enabledDirs[DIR_NUM];
  
@@@ -272,7 -268,6 +274,7 @@@
  #endif
  
      std::set<const AUTH *> authorizedBy;
 +    time_t          authorizedModificationTime;
  
      std::list<STG_MSG> messages;