]> git.stg.codes - stg.git/blob - stargazer/plugins/configuration/rpcconfig/admins_methods.cpp
Some more BSD-related issues.
[stg.git] / stargazer / plugins / configuration / rpcconfig / admins_methods.cpp
1 #include "admins_methods.h"
2 #include "rpcconfig.h"
3
4 #include "stg/common.h"
5
6 #include "stg/admins.h"
7 #include "stg/admin.h"
8 #include "stg/admin_conf.h"
9
10 #include <ostream> // xmlrpc-c devs have missed something :)
11
12 //------------------------------------------------------------------------------
13
14 void METHOD_ADMIN_GET::execute(xmlrpc_c::paramList const & paramList,
15                                xmlrpc_c::value *   const   retvalPtr)
16 {
17 std::string cookie = paramList.getString(0);
18 std::string login = 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 STG::Admin * admin;
32
33 if (admins->Find(login, &admin))
34     {
35     structVal["result"] = xmlrpc_c::value_boolean(false);
36     *retvalPtr = xmlrpc_c::value_struct(structVal);
37     return;
38     }
39
40 structVal["result"] = xmlrpc_c::value_boolean(true);
41 structVal["login"] = xmlrpc_c::value_string(admin->GetLogin());
42 structVal["password"] = xmlrpc_c::value_string(admin->GetPassword());
43
44 const auto priv = admin->GetPriv();
45
46 structVal["user_stat"] = xmlrpc_c::value_boolean(priv->userStat);
47 structVal["user_conf"] = xmlrpc_c::value_boolean(priv->userConf);
48 structVal["user_cash"] = xmlrpc_c::value_boolean(priv->userCash);
49 structVal["user_passwd"] = xmlrpc_c::value_boolean(priv->userPasswd);
50 structVal["user_add_del"] = xmlrpc_c::value_boolean(priv->userAddDel);
51 structVal["admin_chg"] = xmlrpc_c::value_boolean(priv->adminChg);
52 structVal["tariff_chg"] = xmlrpc_c::value_boolean(priv->tariffChg);
53
54 *retvalPtr = xmlrpc_c::value_struct(structVal);
55 }
56
57 //------------------------------------------------------------------------------
58
59 void METHOD_ADMIN_ADD::execute(xmlrpc_c::paramList const & paramList,
60                                xmlrpc_c::value *   const   retvalPtr)
61 {
62 std::string cookie = paramList.getString(0);
63 std::string login = paramList.getString(1);
64 paramList.verifyEnd(2);
65
66 ADMIN_INFO adminInfo;
67
68 if (config->GetAdminInfo(cookie, &adminInfo))
69     {
70     printfd(__FILE__, "METHOD_ADMIN_ADD::execute(): 'Not logged or cookie timeout'\n");
71     *retvalPtr = xmlrpc_c::value_boolean(false);
72     return;
73     }
74
75 STG::Admin * admin;
76
77 if (admins->Find(adminInfo.admin, &admin))
78     {
79     printfd(__FILE__, "METHOD_ADMIN_ADD::execute(): 'Invalid admin (logged)'\n");
80     *retvalPtr = xmlrpc_c::value_boolean(false);
81     return;
82     }
83
84 if (admins->Add(login, admin))
85     {
86     printfd(__FILE__, "METHOD_ADMIN_ADD::execute(): 'Failed to add admin'\n");
87     *retvalPtr = xmlrpc_c::value_boolean(false);
88     return;
89     }
90
91 *retvalPtr = xmlrpc_c::value_boolean(true);
92 }
93
94 //------------------------------------------------------------------------------
95
96 void METHOD_ADMIN_DEL::execute(xmlrpc_c::paramList const & paramList,
97                                xmlrpc_c::value *   const   retvalPtr)
98 {
99 std::string cookie = paramList.getString(0);
100 std::string login = paramList.getString(1);
101 paramList.verifyEnd(2);
102
103 ADMIN_INFO adminInfo;
104
105 if (config->GetAdminInfo(cookie, &adminInfo))
106     {
107     *retvalPtr = xmlrpc_c::value_boolean(false);
108     return;
109     }
110
111 STG::Admin * admin;
112
113 if (admins->Find(adminInfo.admin, &admin))
114     {
115     *retvalPtr = xmlrpc_c::value_boolean(false);
116     return;
117     }
118
119 if (admins->Del(login, admin))
120     {
121     *retvalPtr = xmlrpc_c::value_boolean(false);
122     return;
123     }
124
125 *retvalPtr = xmlrpc_c::value_boolean(true);
126 }
127
128 //------------------------------------------------------------------------------
129
130 void METHOD_ADMIN_CHG::execute(xmlrpc_c::paramList const & paramList,
131                                xmlrpc_c::value *   const   retvalPtr)
132 {
133 std::string cookie = paramList.getString(0);
134 std::string login = paramList.getString(1);
135 xmlrpc_c::value_struct info(paramList.getStruct(2));
136 paramList.verifyEnd(3);
137
138 ADMIN_INFO adminInfo;
139
140 if (config->GetAdminInfo(cookie, &adminInfo))
141     {
142     *retvalPtr = xmlrpc_c::value_boolean(false);
143     return;
144     }
145
146 STG::Admin * loggedAdmin;
147
148 if (admins->Find(adminInfo.admin, &loggedAdmin))
149     {
150     *retvalPtr = xmlrpc_c::value_boolean(false);
151     return;
152     }
153
154 STG::Admin * admin;
155
156 if (admins->Find(login, &admin))
157     {
158     *retvalPtr = xmlrpc_c::value_boolean(false);
159     return;
160     }
161
162 STG::AdminConf conf;
163
164 conf.priv = *admin->GetPriv();
165 conf.password = admin->GetPassword();
166 conf.login = login;
167
168 std::map<std::string, xmlrpc_c::value> structVal(
169     static_cast<std::map<std::string, xmlrpc_c::value> >(xmlrpc_c::value_struct(info))
170     );
171
172 std::map<std::string, xmlrpc_c::value>::iterator it;
173
174 if ((it = structVal.find("password")) != structVal.end())
175     {
176     conf.password = xmlrpc_c::value_string(it->second);
177     }
178
179 if ((it = structVal.find("user_stat")) != structVal.end())
180     {
181     conf.priv.userStat = xmlrpc_c::value_boolean(it->second);
182     }
183
184 if ((it = structVal.find("user_conf")) != structVal.end())
185     {
186     conf.priv.userConf = xmlrpc_c::value_boolean(it->second);
187     }
188
189 if ((it = structVal.find("user_cash")) != structVal.end())
190     {
191     conf.priv.userCash = xmlrpc_c::value_boolean(it->second);
192     }
193
194 if ((it = structVal.find("user_passwd")) != structVal.end())
195     {
196     conf.priv.userPasswd = xmlrpc_c::value_boolean(it->second);
197     }
198
199 if ((it = structVal.find("user_add_del")) != structVal.end())
200     {
201     conf.priv.userAddDel = xmlrpc_c::value_boolean(it->second);
202     }
203
204 if ((it = structVal.find("admin_chg")) != structVal.end())
205     {
206     conf.priv.adminChg = xmlrpc_c::value_boolean(it->second);
207     }
208
209 if ((it = structVal.find("tariff_chg")) != structVal.end())
210     {
211     conf.priv.tariffChg = xmlrpc_c::value_boolean(it->second);
212     }
213
214 if (admins->Change(conf, loggedAdmin))
215     {
216     *retvalPtr = xmlrpc_c::value_boolean(false);
217     }
218
219 *retvalPtr = xmlrpc_c::value_boolean(true);
220 }
221
222 //------------------------------------------------------------------------------
223
224 void METHOD_ADMINS_GET::execute(xmlrpc_c::paramList const & paramList,
225                                 xmlrpc_c::value *   const   retvalPtr)
226 {
227 std::string cookie = paramList.getString(0);
228 paramList.verifyEnd(1);
229
230 std::map<std::string, xmlrpc_c::value> mainStructVal;
231 std::vector<xmlrpc_c::value> retval;
232 ADMIN_INFO adminInfo;
233
234 if (config->GetAdminInfo(cookie, &adminInfo))
235     {
236     mainStructVal["result"] = xmlrpc_c::value_boolean(false);
237     *retvalPtr = xmlrpc_c::value_struct(mainStructVal);
238     return;
239     }
240
241 STG::AdminConf ac;
242 int h = admins->OpenSearch();
243
244 while (admins->SearchNext(h, &ac) == 0)
245     {
246     std::map<std::string, xmlrpc_c::value> structVal;
247     structVal["result"] = xmlrpc_c::value_boolean(true);
248     structVal["login"] = xmlrpc_c::value_string(ac.login);
249     structVal["password"] = xmlrpc_c::value_string(ac.password);
250     structVal["user_stat"] = xmlrpc_c::value_boolean(ac.priv.userStat);
251     structVal["user_conf"] = xmlrpc_c::value_boolean(ac.priv.userConf);
252     structVal["user_cash"] = xmlrpc_c::value_boolean(ac.priv.userCash);
253     structVal["user_passwd"] = xmlrpc_c::value_boolean(ac.priv.userPasswd);
254     structVal["user_add_del"] = xmlrpc_c::value_boolean(ac.priv.userAddDel);
255     structVal["admin_chg"] = xmlrpc_c::value_boolean(ac.priv.adminChg);
256     structVal["tariff_chg"] = xmlrpc_c::value_boolean(ac.priv.tariffChg);
257
258     retval.push_back(xmlrpc_c::value_struct(structVal));
259     }
260
261 *retvalPtr = xmlrpc_c::value_array(retval);
262 }