]> git.stg.codes - stg.git/blobdiff - projects/stargazer/plugins/store/files/file_store.cpp
Ticket 37. if (year < 1990) checking added in the ts2time() function.
[stg.git] / projects / stargazer / plugins / store / files / file_store.cpp
index c09ac21fa449224be5a7b9f2cd016f440bb6ae08..51c3707910c34bbd3bf087c638c341f5060fd5f0 100644 (file)
@@ -67,16 +67,6 @@ const int pt_mega = 1024 * 1024;
 namespace
 {
 PLUGIN_CREATOR<FILES_STORE> fsc;
 namespace
 {
 PLUGIN_CREATOR<FILES_STORE> fsc;
-
-bool CheckAndCreate(const std::string & dir, mode_t mode)
-{
-if (access(dir.c_str(), F_OK) == 0)
-    return true;
-if (mkdir(dir.c_str(), mode) == 0)
-    return true;
-return false;
-}
-
 }
 
 extern "C" STORE * GetStore();
 }
 
 extern "C" STORE * GetStore();
@@ -110,7 +100,7 @@ PARAM_VALUE pv;
 pv.param = owner;
 std::vector<PARAM_VALUE>::const_iterator pvi;
 pvi = find(moduleParams.begin(), moduleParams.end(), pv);
 pv.param = owner;
 std::vector<PARAM_VALUE>::const_iterator pvi;
 pvi = find(moduleParams.begin(), moduleParams.end(), pv);
-if (pvi == moduleParams.end())
+if (pvi == moduleParams.end() || pvi->value.empty())
     {
     errorStr = "Parameter \'" + owner + "\' not found.";
     printfd(__FILE__, "%s\n", errorStr.c_str());
     {
     errorStr = "Parameter \'" + owner + "\' not found.";
     printfd(__FILE__, "%s\n", errorStr.c_str());
@@ -131,7 +121,7 @@ PARAM_VALUE pv;
 pv.param = group;
 std::vector<PARAM_VALUE>::const_iterator pvi;
 pvi = find(moduleParams.begin(), moduleParams.end(), pv);
 pv.param = group;
 std::vector<PARAM_VALUE>::const_iterator pvi;
 pvi = find(moduleParams.begin(), moduleParams.end(), pv);
-if (pvi == moduleParams.end())
+if (pvi == moduleParams.end() || pvi->value.empty())
     {
     errorStr = "Parameter \'" + group + "\' not found.";
     printfd(__FILE__, "%s\n", errorStr.c_str());
     {
     errorStr = "Parameter \'" + group + "\' not found.";
     printfd(__FILE__, "%s\n", errorStr.c_str());
@@ -169,7 +159,7 @@ PARAM_VALUE pv;
 pv.param = modeStr;
 std::vector<PARAM_VALUE>::const_iterator pvi;
 pvi = find(moduleParams.begin(), moduleParams.end(), pv);
 pv.param = modeStr;
 std::vector<PARAM_VALUE>::const_iterator pvi;
 pvi = find(moduleParams.begin(), moduleParams.end(), pv);
-if (pvi == moduleParams.end())
+if (pvi == moduleParams.end() || pvi->value.empty())
     {
     errorStr = "Parameter \'" + modeStr + "\' not found.";
     printfd(__FILE__, "%s\n", errorStr.c_str());
     {
     errorStr = "Parameter \'" + modeStr + "\' not found.";
     printfd(__FILE__, "%s\n", errorStr.c_str());
@@ -211,7 +201,7 @@ std::vector<PARAM_VALUE>::const_iterator pvi;
 PARAM_VALUE pv;
 pv.param = "RemoveBak";
 pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv);
 PARAM_VALUE pv;
 pv.param = "RemoveBak";
 pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
+if (pvi == s.moduleParams.end() || pvi->value.empty())
     {
     removeBak = true;
     }
     {
     removeBak = true;
     }
@@ -226,7 +216,7 @@ else
 
 pv.param = "ReadBak";
 pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv);
 
 pv.param = "ReadBak";
 pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
+if (pvi == s.moduleParams.end() || pvi->value.empty())
     {
     readBak = false;
     }
     {
     readBak = false;
     }
@@ -241,7 +231,7 @@ else
 
 pv.param = "WorkDir";
 pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv);
 
 pv.param = "WorkDir";
 pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
+if (pvi == s.moduleParams.end() || pvi->value.empty())
     {
     errorStr = "Parameter \'WorkDir\' not found.";
     printfd(__FILE__, "Parameter 'WorkDir' not found\n");
     {
     errorStr = "Parameter \'WorkDir\' not found.";
     printfd(__FILE__, "Parameter 'WorkDir' not found\n");
@@ -254,33 +244,8 @@ if (workDir.size() && workDir[workDir.size() - 1] == '/')
     workDir.resize(workDir.size() - 1);
     }
 usersDir = workDir + "/users/";
     workDir.resize(workDir.size() - 1);
     }
 usersDir = workDir + "/users/";
-if (!CheckAndCreate(usersDir, GetConfModeDir()))
-    {
-    errorStr = usersDir + " doesn't exist. Failed to create.";
-    printfd(__FILE__, "%s\n", errorStr.c_str());
-    return -1;
-    }
 tariffsDir = workDir + "/tariffs/";
 tariffsDir = workDir + "/tariffs/";
-if (!CheckAndCreate(tariffsDir, GetConfModeDir()))
-    {
-    errorStr = tariffsDir + " doesn't exist. Failed to create.";
-    printfd(__FILE__, "%s\n", errorStr.c_str());
-    return -1;
-    }
 adminsDir = workDir + "/admins/";
 adminsDir = workDir + "/admins/";
-if (!CheckAndCreate(adminsDir, GetConfModeDir()))
-    {
-    errorStr = adminsDir + " doesn't exist. Failed to create.";
-    printfd(__FILE__, "%s\n", errorStr.c_str());
-    return -1;
-    }
-servicesDir = workDir + "/services/";
-if (!CheckAndCreate(servicesDir, GetConfModeDir()))
-    {
-    errorStr = servicesDir + " doesn't exist. Failed to create.";
-    printfd(__FILE__, "%s\n", errorStr.c_str());
-    return -1;
-    }
 
 return 0;
 }
 
 return 0;
 }
@@ -445,24 +410,6 @@ STG_LOCKER lock(&mutex);
 
 tariffList->swap(files);
 
 
 tariffList->swap(files);
 
-return 0;
-}
-//-----------------------------------------------------------------------------
-int FILES_STORE::GetServicesList(std::vector<std::string> * list) const
-{
-std::vector<std::string> files;
-
-if (GetFileList(&files, storeSettings.GetServicesDir(), S_IFREG, ".serv"))
-    {
-    STG_LOCKER lock(&mutex);
-    errorStr = "Failed to open '" + storeSettings.GetServicesDir() + "': " + std::string(strerror(errno));
-    return -1;
-    }
-
-STG_LOCKER lock(&mutex);
-
-list->swap(files);
-
 return 0;
 }
 //-----------------------------------------------------------------------------
 return 0;
 }
 //-----------------------------------------------------------------------------
@@ -1518,6 +1465,19 @@ if (conf.ReadString("Period", &str, "month") < 0)
     td->tariffConf.period = TARIFF::MONTH;
 else
     td->tariffConf.period = TARIFF::StringToPeriod(str);
     td->tariffConf.period = TARIFF::MONTH;
 else
     td->tariffConf.period = TARIFF::StringToPeriod(str);
+
+if (conf.ReadString("ChangePolicy", &str, "allow") < 0)
+    td->tariffConf.changePolicy = TARIFF::ALLOW;
+else
+    td->tariffConf.changePolicy = TARIFF::StringToChangePolicy(str);
+
+if (conf.ReadTime("ChangePolicyTimeout", &td->tariffConf.changePolicyTimeout, 0) < 0)
+    {
+    STG_LOCKER lock(&mutex);
+    errorStr = "Cannot read tariff " + tariffName + ". Parameter ChangePolicyTimeout";
+    printfd(__FILE__, "FILES_STORE::RestoreTariff - changepolicytimeout read failed for tariff '%s'\n", tariffName.c_str());
+    return -1;
+    }
 return 0;
 }
 //-----------------------------------------------------------------------------
 return 0;
 }
 //-----------------------------------------------------------------------------
@@ -1579,118 +1539,10 @@ std::string fileName = storeSettings.GetTariffsDir() + "/" + tariffName + ".tf";
     cf.WriteDouble("Free", td.tariffConf.free);
     cf.WriteString("TraffType", TARIFF::TraffTypeToString(td.tariffConf.traffType));
     cf.WriteString("Period", TARIFF::PeriodToString(td.tariffConf.period));
     cf.WriteDouble("Free", td.tariffConf.free);
     cf.WriteString("TraffType", TARIFF::TraffTypeToString(td.tariffConf.traffType));
     cf.WriteString("Period", TARIFF::PeriodToString(td.tariffConf.period));
+    cf.WriteString("ChangePolicy", TARIFF::ChangePolicyToString(td.tariffConf.changePolicy));
+    cf.WriteTime("ChangePolicyTimeout", td.tariffConf.changePolicyTimeout);
     }
 
     }
 
-return 0;
-}
-//-----------------------------------------------------------------------------*/
-int FILES_STORE::AddService(const std::string & name) const
-{
-std::string fileName;
-strprintf(&fileName, "%s/%s.serv", storeSettings.GetServicesDir().c_str(), name.c_str());
-
-if (Touch(fileName))
-    {
-    STG_LOCKER lock(&mutex);
-    errorStr = "Cannot create file " + fileName;
-    printfd(__FILE__, "FILES_STORE::AddService - failed to add service '%s'\n", name.c_str());
-    return -1;
-    }
-
-return 0;
-}
-//-----------------------------------------------------------------------------*/
-int FILES_STORE::DelService(const std::string & name) const
-{
-std::string fileName;
-strprintf(&fileName, "%s/%s.serv", storeSettings.GetServicesDir().c_str(), name.c_str());
-if (unlink(fileName.c_str()))
-    {
-    STG_LOCKER lock(&mutex);
-    errorStr = "unlink failed. Message: '";
-    errorStr += strerror(errno);
-    errorStr += "'";
-    printfd(__FILE__, "FILES_STORE::DelAdmin - unlink failed. Message: '%s'\n", strerror(errno));
-    }
-return 0;
-}
-//-----------------------------------------------------------------------------*/
-int FILES_STORE::SaveService(const SERVICE_CONF & conf) const
-{
-std::string fileName;
-
-strprintf(&fileName, "%s/%s.serv", storeSettings.GetServicesDir().c_str(), conf.name.c_str());
-
-    {
-    CONFIGFILE cf(fileName, true);
-
-    int e = cf.Error();
-
-    if (e)
-        {
-        STG_LOCKER lock(&mutex);
-        errorStr = "Cannot write service " + conf.name + ". " + fileName;
-        printfd(__FILE__, "FILES_STORE::SaveService - failed to save service '%s'\n", conf.name.c_str());
-        return -1;
-        }
-
-    cf.WriteString("name", conf.name);
-    cf.WriteString("comment", conf.comment);
-    cf.WriteDouble("cost", conf.cost);
-    cf.WriteInt("pay_day", conf.payDay);
-    }
-
-return 0;
-}
-//-----------------------------------------------------------------------------
-int FILES_STORE::RestoreService(SERVICE_CONF * conf, const std::string & name) const
-{
-std::string fileName;
-strprintf(&fileName, "%s/%s.serv", storeSettings.GetServicesDir().c_str(), name.c_str());
-CONFIGFILE cf(fileName);
-
-if (cf.Error())
-    {
-    STG_LOCKER lock(&mutex);
-    errorStr = "Cannot open " + fileName;
-    printfd(__FILE__, "FILES_STORE::RestoreService - failed to restore service '%s'\n", name.c_str());
-    return -1;
-    }
-
-if (cf.ReadString("name", &conf->name, name))
-    {
-    STG_LOCKER lock(&mutex);
-    errorStr = "Error in parameter 'name'";
-    printfd(__FILE__, "FILES_STORE::RestoreService - name read failed for service '%s'\n", name.c_str());
-    return -1;
-    }
-
-if (cf.ReadString("comment", &conf->comment, ""))
-    {
-    STG_LOCKER lock(&mutex);
-    errorStr = "Error in parameter 'comment'";
-    printfd(__FILE__, "FILES_STORE::RestoreService - comment read failed for service '%s'\n", name.c_str());
-    return -1;
-    }
-
-if (cf.ReadDouble("cost", &conf->cost, 0.0))
-    {
-    STG_LOCKER lock(&mutex);
-    errorStr = "Error in parameter 'cost'";
-    printfd(__FILE__, "FILES_STORE::RestoreService - cost read failed for service '%s'\n", name.c_str());
-    return -1;
-    }
-
-unsigned short value = 0;
-if (cf.ReadUShortInt("pay_day", &value, 0))
-    {
-    STG_LOCKER lock(&mutex);
-    errorStr = "Error in parameter 'pay_day'";
-    printfd(__FILE__, "FILES_STORE::RestoreService - pay day read failed for service '%s'\n", name.c_str());
-    return -1;
-    }
-conf->payDay = value;
-
 return 0;
 }
 //-----------------------------------------------------------------------------
 return 0;
 }
 //-----------------------------------------------------------------------------