]> git.stg.codes - stg.git/blob - projects/stargazer/plugins/configuration/rpcconfig/info_methods.cpp
Use std::lock_guard instead of STG_LOCKER.
[stg.git] / projects / stargazer / plugins / configuration / rpcconfig / info_methods.cpp
1 #include "info_methods.h"
2 #include "rpcconfig.h"
3
4 #include "stg/users.h"
5 #include "stg/tariffs.h"
6 #include "stg/version.h"
7 #include "stg/common.h"
8 #include "stg/const.h"
9
10 #include <ostream> // xmlrpc-c devs have missed something :)
11
12 #include <sys/utsname.h>
13
14 void METHOD_INFO::execute(xmlrpc_c::paramList const & paramList,
15                           xmlrpc_c::value *   const   retvalPtr)
16 {
17 paramList.verifyEnd(0);
18 std::map<std::string, xmlrpc_c::value> structVal;
19
20 std::string un;
21 struct utsname utsn;
22
23 uname(&utsn);
24 un[0] = 0;
25
26 un += utsn.sysname;
27 un += " ";
28 un += utsn.release;
29 un += " ";
30 un += utsn.machine;
31 un += " ";
32 un += utsn.nodename;
33
34 structVal["version"] = xmlrpc_c::value_string(SERVER_VERSION);
35 structVal["tariff_num"] = xmlrpc_c::value_int(static_cast<int>(tariffs->Count()));
36 structVal["tariff"] = xmlrpc_c::value_int(2);
37 structVal["users_num"] = xmlrpc_c::value_int(static_cast<int>(users->Count()));
38 structVal["uname"] = xmlrpc_c::value_string(un);
39 structVal["dir_num"] = xmlrpc_c::value_int(DIR_NUM);
40 structVal["day_fee"] = xmlrpc_c::value_int(static_cast<int>(dayFee));
41
42 std::vector<xmlrpc_c::value> dirnameVal;
43
44 for (int i = 0; i< DIR_NUM; i++)
45     {
46     dirnameVal.push_back(xmlrpc_c::value_string(IconvString(dirNames[i], "KOI8-RU", "UTF-8")));
47     }
48
49 structVal["dir_names"] = xmlrpc_c::value_array(dirnameVal);
50
51 *retvalPtr = xmlrpc_c::value_struct(structVal);
52 }
53
54 void METHOD_LOGIN::execute(xmlrpc_c::paramList const & paramList,
55                            xmlrpc_c::value *   const   retvalPtr)
56 {
57 std::string login = paramList.getString(0);
58 std::string password = paramList.getString(1);
59 paramList.verifyEnd(2);
60
61 std::map<std::string, xmlrpc_c::value> structVal;
62
63 std::string cookie;
64 if (config->CheckAdmin(login, password, &cookie))
65     {
66     structVal["result"] = xmlrpc_c::value_boolean(false);
67     structVal["cookie"] = xmlrpc_c::value_string("");
68     }
69 else
70     {
71     structVal["result"] = xmlrpc_c::value_boolean(true);
72     structVal["cookie"] = xmlrpc_c::value_string(cookie);
73     }
74
75 *retvalPtr = xmlrpc_c::value_struct(structVal);
76 }
77
78 void METHOD_LOGOUT::execute(xmlrpc_c::paramList const & paramList,
79                             xmlrpc_c::value *   const   retvalPtr)
80 {
81 std::string cookie = paramList.getString(0);
82 paramList.verifyEnd(1);
83
84 if (config->LogoutAdmin(cookie))
85     {
86     *retvalPtr = xmlrpc_c::value_boolean(false);
87     }
88 else
89     {
90     *retvalPtr = xmlrpc_c::value_boolean(true);
91     }
92 }