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