Timesheets-Server
Timesheets server
Načítám...
Vyhledávám...
Nebylo nic nalezeno
controllerserver.cpp
Zobrazit dokumentaci tohoto souboru.
1
7#include "controllerserver.h"
8#include "httprequest.h"
9#include "msettings.h"
10#include "version.h"
11#include "pdebug.h"
12#include "pluginstore.h"
13#include "timesheetserver.h"
14#include "database.h"
15#include <QTimer>
16#include <QFileInfo>
17#include <QDir>
18
19
20using namespace Httpd;
21
22ControllerServer::ControllerServer(HobrasoftHttpd::HttpConnection *parent) : AbstractController(parent) {
23}
24
25void ControllerServer::serviceIdGet (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QString& id) {
26
27 if (id == "about") {
28 AUTHORIZEREQUEST(Security::Permissions::Server);
29
30 QList<Dbt::ServerInfo> list = db()->serverInfo();
31 QString serverName = (list.isEmpty()) ? MSETTINGS->serverName() : list.first().name;
32 QString serverDescription = (list.isEmpty()) ? MSETTINGS->serverDescription() : list.first().description;
33
34 QVariantMap data;
35 data["configfile"] = MSETTINGS->fileName();
36 data["name"] = serverName;
37 data["description"] = serverDescription;
38 data["git_commit"] = GIT_COMMIT;
39 data["git_branch"] = GIT_BRANCH;
40 data["version"] = VERSION;
41 data["qt_version"] = qtVersion();
42 serviceOK(request, response, data);
43 return;
44 }
45
46 if (id == "configfile") {
47 AUTHORIZEREQUEST(Security::Permissions::ServerConfigFile);
48 QString configstring;
49 QString configfile = MSETTINGS->fileName();
50 QFile file(configfile);
51 if (file.open(QIODevice::ReadOnly)) {
52 configstring = QString::fromUtf8(file.readAll());
53 configstring = configstring.replace(QRegExp("password\\s*=[^\\n]*\\n"), "password = ***\n");
54 file.close();
55 }
56 QVariantMap data;
57 data["configfile"] = MSETTINGS->fileName();
58 data["config"] = configstring;
59 serviceOK(request, response, data);
60 return;
61 }
62
63 if (id == "restart") {
64 // AUTHORIZEREQUEST(Security::Permissions::ServerRestart);
65 QVariantMap data;
66 PDEBUG << "restart :-)))";
67 if (request->parameter("reallyrestart") == "YES" && MSETTINGS->serverEnableRemoteRestart()) {
68 // nelze volat přímo, je v jiném vláknu
69 QTimer::singleShot(100, TimesheetServer::instance(), &TimesheetServer::restart);
70 QVariantMap data;
71 data["ok"] = true;
72 PDEBUG << "restarting";
73 serviceOK(request, response, data);
74 return;
75 } else {
76 PDEBUG << "restart disabled";
77 serviceError(request, response, 405, "bad-request", "Could not restart server");
78 return;
79 }
80 PDEBUG << "a doprdele....";
81 return;
82 }
83
84 if (id == "objects") {
85 serviceOK(request, response, objects(TimesheetServer::instance()));
86 return;
87 }
88
89 serviceError(request, response, 404, "not-found", "Not found");
90
91}
92
93
94QVariantList ControllerServer::objects(const QObject *object, int depth) {
95 QVariantList data;
96 if (depth > 10) {
97 return data;
98 }
99 QObjectList list = object->children();
100 for (int i=0; i<list.size(); i++) {
101 const QObject *x = list[i];
102 QVariantMap objectdata;
103 objectdata["address"] = (quint64)x;
104 objectdata["name"] = x->objectName().isEmpty() ? "unnamed" : x->objectName();
105 objectdata["class"] = x->metaObject()->className();
106 objectdata["children"] = objects(x, depth+1);
107 data << objectdata;
108 }
109 return data;
110}
111
112
113void ControllerServer::serviceIdPut(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QVariantMap& data) {
114 serviceOK(request, response, putKey(db()->save(Dbt::ServerInfo::fromMap(data))));
115}
116
117
118void ControllerServer::serviceIdPost(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QVariantMap& data) {
119 serviceIdPut(request, response, data);
120}
121
Virtuální třída pro vyřizování unifikovaných Http požadavků na server API.
virtual void serviceError(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, int code, const QString &error, const QVariantMap &data)
Pošle chybovou odpověď
virtual void serviceOK(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QVariant &data=QVariant())
Pošle odpověď 200 OK.
HobrasoftHttpd::HttpRequest * request() const
Vrací ukazatel na aktuální request.
void serviceIdPut(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QVariantMap &data) Q_DECL_OVERRIDE
Pošle odpověď na požadavek konkrétního ID metodou PUT - obvykle vloží nový objekt nebo přepíše existu...
void serviceIdGet(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QString &id) Q_DECL_OVERRIDE
Pošle odpověď na požadavek konkrétního ID metodou GET.
void serviceIdPost(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QVariantMap &data) Q_DECL_OVERRIDE
Pošle odpověď na požadavek konkrétního ID metodou PUT - obvykle vloží nový objekt nebo přepíše existu...
void restart()
Restartuje (nebo ukončí) server.
static TimesheetServer * instance()
Vrací ukazatel na singleton instanci třídy.
Jmenný prostor pro obsluhu konkrétních HTTP požadavků aplikace.