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