Timesheets-Server
Timesheets server
Načítám...
Vyhledávám...
Nebylo nic nalezeno
requestmapper.cpp
Zobrazit dokumentaci tohoto souboru.
1
7#include "requestmapper.h"
8#include "httprequest.h"
9#include "httpresponse.h"
10#include "httpconnection.h"
11#include "sessionstore.h"
12#include "staticfilecontroller.h"
13#include "msettings.h"
14#include "pdebug.h"
15#include "pluginstore.h"
16#include "plugininterface.h"
17#include "requestauthorizer.h"
18
19// nové API
20#include "controllerserver.h"
26#include "controllerstatuses.h"
28#include "controllertickets.h"
29#include "controllerticketsvw.h"
34#include "controllerusers.h"
36#include "controllertimesheet.h"
37#include "controlleroverview.h"
39
40using namespace HobrasoftHttpd;
41using namespace Httpd;
42
56RequestMapper::~RequestMapper() {
57}
58
59
60RequestMapper::RequestMapper(HobrasoftHttpd::HttpConnection *parent) : HobrasoftHttpd::HttpRequestHandler(parent) {
61 // PDEBUG << parent->thread() << this->thread();
62 m_authorizer = new RequestAuthorizer(parent);
63}
64
65
66void RequestMapper::service(HttpRequest *request, HttpResponse *response) {
67 m_path = request->path();
68 PDEBUG << request->method() << request->fullPath();
69
70 #define ROUTER(adresa, trida) \
71 if (m_path.startsWith(adresa)) { \
72 AbstractController *controller = new trida (connection()); \
73 controller->setAuthorizer(m_authorizer); \
74 controller->service(request, response); \
75 return; \
76 }
77
78 if (m_path.contains(QRegExp("^/public/.*\\.shtml"))) {
79 serviceShtmlFile(request, response);
80 response->flush();
81 return;
82 }
83
84 if (m_path.startsWith("/index.html") || m_path == "/") {
85 StaticFileController(connection()).service(request, response);
86 response->flush();
87 return;
88 }
89
90 if (m_path.startsWith("/public/")) {
91 StaticFileController(connection()).service(request, response);
92 response->flush();
93 return;
94 }
95
96
97 // Možné bez přihlášení
98 ROUTER("/api/v1/overview/0x", ControllerOverviewPublic);
99 ROUTER("/api/v1/server/about", ControllerServer);
100
101 // Kontrola přihlášení
102 if (!m_authorizer->isLoggedIn(request, response)) {
103 return;
104 }
105
109 ROUTER("/api/v1/categoriessiblings", ControllerCategoriesSiblings);
110 ROUTER("/api/v1/tickettimesheets", ControllerTicketTimesheets);
111 ROUTER("/api/v1/categoriestoroot", ControllerCategoriesToRoot);
112 ROUTER("/api/v1/statustemplates", ControllerStatusTemplates);
113 ROUTER("/api/v1/userscategories", ControllerUsersCategories);
114 ROUTER("/api/v1/categoriestree", ControllerCategoriesTree);
115 ROUTER("/api/v1/ticketvalues", ControllerTicketValues);
116 ROUTER("/api/v1/ticketstatus", ControllerTicketStatus);
117 ROUTER("/api/v1/ticketfiles", ControllerTicketFiles);
118 ROUTER("/api/v1/statusorder", ControllerStatusOrder);
119 ROUTER("/api/v1/categories", ControllerCategories);
120 ROUTER("/api/v1/ticketsvw", ControllerTicketsVw);
121 ROUTER("/api/v1/timesheet", ControllerTimesheet);
122 ROUTER("/api/v1/overview", ControllerOverview);
123 ROUTER("/api/v1/statuses", ControllerStatuses);
124 ROUTER("/api/v1/tickets", ControllerTickets);
125 ROUTER("/api/v1/server", ControllerServer);
126 ROUTER("/api/v1/users", ControllerUsers);
127
128 if (m_path.contains(QRegExp(".*\\.shtml"))) {
129 serviceShtmlFile(request, response);
130 response->flush();
131 return;
132 }
133
134 StaticFileController(connection()).service(request, response);
135}
136
137
138void RequestMapper::serviceShtmlFile(HttpRequest *request, HttpResponse *response) {
139 Q_UNUSED(request);
140 QByteArray data;
141 try {
142 data = readFile(m_path, response);
143 }
144 catch (...) {
145 return;
146 }
147 response->setHeader("Content-Type", "text/html; charset=" + connection()->settings()->encoding());
148 response->write(data);
149 response->flush();
150}
151
152
153QByteArray RequestMapper::readFile(const QString& path, HttpResponse *response) {
154 QByteArray data;
155 if (path.startsWith("/..") || path.startsWith("..")) {
156 response->setStatus(403,"Forbidden");
157 response->write(QString("403 Forbidden: %1<br>\nDo not use ../ in your file path").arg(path).toUtf8());
158 response->flush();
159 throw false;
160 }
161
162 QFile file(connection()->settings()->docroot()+"/"+path);
163 if (!file.exists()) {
164 response->setStatus(404, "Not found");
165 response->write(QString("404 File not found: %1").arg(file.fileName()).toUtf8());
166 response->flush();
167 throw false;
168 }
169
170 if (!file.open(QIODevice::ReadOnly)) {
171 response->setStatus(403, "Forbidden");
172 response->write(QString("403 Forbidden: %1").arg(file.fileName()).toUtf8());
173 response->flush();
174 throw false;
175 }
176
177 QString rolename = Security::Roles::toString(m_authorizer->role());
178
179 while (!file.atEnd()) {
180 QString line = QString::fromUtf8(file.readLine());
181 line = line.replace("${ROLE}", rolename);
182 // if (line.contains(QRegExp("^\\s*<!--\\s*#include\\s+\".+\"\\s*-->\\s*$"))) {
183 if (line.contains(QRegExp(R"X(^\s*<!--\s*#include\s+['"].+['"]\s*-->\s*$)X"))) {
184 QStringList lineparts = line.split(QRegExp(R"X(['"])X"));
185 if (lineparts.size() != 3) {
186 continue;
187 }
188 data += readFile(lineparts[1], response);
189 continue;
190 }
191 data += line.toUtf8();
192 }
193
194 file.close();
195 return data;
196}
197
198
199
200
Vrací seznam kategorií od zadané kategorie až k rootu.
Manipulace s kategoriemi.
Vrací podklady pro tištěný pracovní výkaz.
Vrací podklady pro tištěný pracovní výkaz.
Vrací informace o serveru.
Vrací informace o pořadí přechodů mezi jednotlivými stavy ticketu.
Manipulace se šablonami stavů
Manipulace se stavy ticketů
Manipulace se soubory ticketů
Manipulace se stavy ticketů
Manipulace se záznamy pracovního výkazu.
Manipulace s přibalenými objekty ticketů
Manipuluje s informacemi o ticketech.
Manipuluje s informacemi o ticketech.
Nastartování nebo zastavení pracovního výkazu.
Manipulace s uživateli.
Kontroluje přihlašování uživatelů a jejich oprávnění přes webové rozhraní
bool isLoggedIn(HobrasoftHttpd::HttpRequest *, HobrasoftHttpd::HttpResponse *)
Řídí přihlašování k webovému rozhraní
Security::Roles::Role role() const
QString m_path
Obsluhovaná cesta (URL adresa)
RequestMapper(HobrasoftHttpd::HttpConnection *parent)
Konstruktor.
void service(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response)
Vyřizuje jeden požadavek.
Jmenný prostor pro obsluhu konkrétních HTTP požadavků aplikace.
static QString toString(Role role)
Vrací název odpovídající role v textu.
Definition roles.h:31