]> git.stg.codes - stg.git/blob - projects/stargazer/plugins/configuration/rpcconfig/tariffs_methods.cpp
Use std::lock_guard instead of STG_LOCKER.
[stg.git] / projects / stargazer / plugins / configuration / rpcconfig / tariffs_methods.cpp
1 #include <ostream> // xmlrpc-c devs have missed something :)
2
3 #include "tariffs_methods.h"
4 #include "rpcconfig.h"
5 #include "tariff_helper.h"
6
7 #include "stg/tariffs.h"
8 #include "stg/tariff.h"
9 #include "stg/tariff_conf.h"
10 #include "stg/users.h"
11 #include "stg/admins.h"
12 #include "stg/admin.h"
13
14 void METHOD_TARIFF_GET::execute(xmlrpc_c::paramList const & paramList,
15                                 xmlrpc_c::value *   const   retvalPtr)
16 {
17 std::string cookie = paramList.getString(0);
18 std::string name = paramList.getString(1);
19 paramList.verifyEnd(2);
20
21 std::map<std::string, xmlrpc_c::value> structVal;
22 ADMIN_INFO adminInfo;
23
24 if (config->GetAdminInfo(cookie, &adminInfo))
25     {
26     structVal["result"] = xmlrpc_c::value_boolean(false);
27     *retvalPtr = xmlrpc_c::value_struct(structVal);
28     return;
29     }
30
31 const auto tariff = tariffs->FindByName(name);
32
33 if (!tariff)
34     {
35     structVal["result"] = xmlrpc_c::value_boolean(false);
36     *retvalPtr = xmlrpc_c::value_struct(structVal);
37     return;
38     }
39
40 auto td = tariff->GetTariffData();
41
42 TARIFF_HELPER helper(td);
43
44 helper.GetTariffInfo(retvalPtr);
45 }
46
47 void METHOD_TARIFF_CHG::execute(xmlrpc_c::paramList const & paramList,
48                                 xmlrpc_c::value *   const   retvalPtr)
49 {
50 std::string cookie = paramList.getString(0);
51 std::string name = paramList.getString(1);
52 xmlrpc_c::value_struct info(paramList.getStruct(2));
53 paramList.verifyEnd(3);
54
55 ADMIN_INFO adminInfo;
56
57 if (config->GetAdminInfo(cookie, &adminInfo))
58     {
59     *retvalPtr = xmlrpc_c::value_boolean(false);
60     return;
61     }
62
63 STG::Admin * admin;
64
65 if (admins->find(adminInfo.admin, &admin))
66     {
67     *retvalPtr = xmlrpc_c::value_boolean(false);
68     return;
69     }
70
71 const auto tariff = tariffs->FindByName(name);
72
73 if (!tariff)
74     {
75     *retvalPtr = xmlrpc_c::value_boolean(false);
76     return;
77     }
78
79 auto td = tariff->GetTariffData();
80
81 TARIFF_HELPER helper(td);
82
83 helper.SetTariffInfo(info);
84
85 if (tariffs->Chg(td, admin))
86     {
87     *retvalPtr = xmlrpc_c::value_boolean(false);
88     return;
89     }
90
91 *retvalPtr = xmlrpc_c::value_boolean(true);
92 }
93
94 void METHOD_TARIFFS_GET::execute(xmlrpc_c::paramList const & paramList,
95                                  xmlrpc_c::value *   const   retvalPtr)
96 {
97 std::string cookie = paramList.getString(0);
98 paramList.verifyEnd(1);
99
100 std::map<std::string, xmlrpc_c::value> structVal;
101 ADMIN_INFO adminInfo;
102
103 if (config->GetAdminInfo(cookie, &adminInfo))
104     {
105     structVal["result"] = xmlrpc_c::value_boolean(false);
106     *retvalPtr = xmlrpc_c::value_struct(structVal);
107     return;
108     }
109
110 std::vector<xmlrpc_c::value> tariffsInfo;
111
112
113 std::vector<STG::TariffData> dataList;
114 tariffs->GetTariffsData(&dataList);
115 auto it = dataList.begin();
116 for (; it != dataList.end(); ++it)
117     {
118     xmlrpc_c::value info;
119     auto td = *it; // 'cause TARIFF_HELPER work in both ways and take not const referense
120     TARIFF_HELPER helper(td);
121     helper.GetTariffInfo(&info);
122     tariffsInfo.push_back(info);
123     }
124
125 *retvalPtr = xmlrpc_c::value_array(tariffsInfo);
126 }
127
128 void METHOD_TARIFF_ADD::execute(xmlrpc_c::paramList const & paramList,
129                                 xmlrpc_c::value *   const   retvalPtr)
130 {
131 std::string cookie = paramList.getString(0);
132 std::string tariff = paramList.getString(1);
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 STG::Admin * admin;
144
145 if (admins->find(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 STG::Admin * admin;
176
177 if (admins->find(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 }