]> git.stg.codes - stg.git/blob - projects/stargazer/plugins/configuration/rpcconfig/tariffs_methods.cpp
Усунуто проблему race conditions у rscriptd
[stg.git] / projects / stargazer / plugins / configuration / rpcconfig / tariffs_methods.cpp
1 #include "rpcconfig.h"
2 #include "tariffs_methods.h"
3 #include "tariff_helper.h"
4 #include "../../../tariffs.h"
5 #include "../../../users.h"
6 #include "../../../admins.h"
7 #include "../../../admin.h"
8
9 void METHOD_TARIFF_GET::execute(xmlrpc_c::paramList const & paramList,
10                                 xmlrpc_c::value *   const   retvalPtr)
11 {
12 std::string cookie = paramList.getString(0);
13 std::string name = paramList.getString(1);
14 paramList.verifyEnd(2);
15
16 std::map<std::string, xmlrpc_c::value> structVal;
17 ADMIN_INFO adminInfo;
18
19 if (config->GetAdminInfo(cookie, &adminInfo))
20     {
21     structVal["result"] = xmlrpc_c::value_boolean(false);
22     *retvalPtr = xmlrpc_c::value_struct(structVal);
23     return;
24     }
25
26 const TARIFF * tariff = tariffs->FindByName(name);
27
28 if (!tariff)
29     {
30     structVal["result"] = xmlrpc_c::value_boolean(false);
31     *retvalPtr = xmlrpc_c::value_struct(structVal);
32     return;
33     }
34
35 TARIFF_DATA td;
36
37 tariff->GetTariffData(&td);
38
39 TARIFF_HELPER helper(td);
40
41 helper.GetTariffInfo(retvalPtr);
42 }
43
44 void METHOD_TARIFF_CHG::execute(xmlrpc_c::paramList const & paramList,
45                                 xmlrpc_c::value *   const   retvalPtr)
46 {
47 std::string cookie = paramList.getString(0);
48 std::string name = paramList.getString(1);
49 xmlrpc_c::value_struct info(paramList.getStruct(2));
50 paramList.verifyEnd(3);
51
52 ADMIN_INFO adminInfo;
53
54 if (config->GetAdminInfo(cookie, &adminInfo))
55     {
56     *retvalPtr = xmlrpc_c::value_boolean(false);
57     return;
58     }
59
60 ADMIN admin;
61
62 if (admins->FindAdmin(adminInfo.admin, &admin))
63     {
64     *retvalPtr = xmlrpc_c::value_boolean(false);
65     return;
66     }
67
68 const TARIFF * tariff = tariffs->FindByName(name);
69
70 if (!tariff)
71     {
72     *retvalPtr = xmlrpc_c::value_boolean(false);
73     return;
74     }
75
76 TARIFF_DATA td;
77
78 tariff->GetTariffData(&td);
79
80 TARIFF_HELPER helper(td);
81
82 helper.SetTariffInfo(info);
83
84 if (tariffs->Chg(td, admin))
85     {
86     *retvalPtr = xmlrpc_c::value_boolean(false);
87     return;
88     }
89
90 *retvalPtr = xmlrpc_c::value_boolean(true);
91 }
92
93 void METHOD_TARIFFS_GET::execute(xmlrpc_c::paramList const & paramList,
94                                  xmlrpc_c::value *   const   retvalPtr)
95 {
96 std::string cookie = paramList.getString(0);
97 paramList.verifyEnd(1);
98
99 std::map<std::string, xmlrpc_c::value> structVal;
100 ADMIN_INFO adminInfo;
101
102 if (config->GetAdminInfo(cookie, &adminInfo))
103     {
104     structVal["result"] = xmlrpc_c::value_boolean(false);
105     *retvalPtr = xmlrpc_c::value_struct(structVal);
106     return;
107     }
108
109 std::vector<xmlrpc_c::value> tariffsInfo;
110
111
112 std::list<TARIFF_DATA> dataList;
113 tariffs->GetTariffsData(&dataList);
114 std::list<TARIFF_DATA>::const_iterator it = dataList.begin();
115 for (; it != dataList.end(); ++it)
116     {
117     xmlrpc_c::value info;
118     TARIFF_DATA td(*it); // 'cause TARIFF_HELPER work in both ways and take not const referense
119     TARIFF_HELPER helper(td);
120     helper.GetTariffInfo(&info);
121     tariffsInfo.push_back(info);
122     }
123
124 *retvalPtr = xmlrpc_c::value_array(tariffsInfo);
125 }
126
127 void METHOD_TARIFF_ADD::execute(xmlrpc_c::paramList const & paramList,
128                                 xmlrpc_c::value *   const   retvalPtr)
129 {
130 std::string cookie = paramList.getString(0);
131 std::string tariff = paramList.getString(1);
132 std::string enc;
133 paramList.verifyEnd(2);
134
135 ADMIN_INFO adminInfo;
136
137 if (config->GetAdminInfo(cookie, &adminInfo))
138     {
139     *retvalPtr = xmlrpc_c::value_boolean(false);
140     return;
141     }
142
143 ADMIN admin;
144
145 if (admins->FindAdmin(adminInfo.admin, &admin))
146     {
147     *retvalPtr = xmlrpc_c::value_boolean(false);
148     return;
149     }
150
151 if (tariffs->Add(tariff, admin))
152     {
153     *retvalPtr = xmlrpc_c::value_boolean(false);
154     return;
155     }
156
157 *retvalPtr = xmlrpc_c::value_boolean(true);
158 }
159
160 void METHOD_TARIFF_DEL::execute(xmlrpc_c::paramList const & paramList,
161                                 xmlrpc_c::value *   const   retvalPtr)
162 {
163 std::string cookie = paramList.getString(0);
164 std::string tariff = paramList.getString(1);
165 paramList.verifyEnd(2);
166
167 ADMIN_INFO adminInfo;
168
169 if (config->GetAdminInfo(cookie, &adminInfo))
170     {
171     *retvalPtr = xmlrpc_c::value_boolean(false);
172     return;
173     }
174
175 ADMIN admin;
176
177 if (admins->FindAdmin(adminInfo.admin, &admin))
178     {
179     *retvalPtr = xmlrpc_c::value_boolean(false);
180     return;
181     }
182
183 if (users->TariffInUse(tariff))
184     {
185     *retvalPtr = xmlrpc_c::value_boolean(false);
186     return;
187     }
188
189 if (tariffs->Del(tariff, admin))
190     {
191     *retvalPtr = xmlrpc_c::value_boolean(false);
192     return;
193     }
194
195 *retvalPtr = xmlrpc_c::value_boolean(true);
196 }