Timesheets-Server
Timesheets server
Načítám...
Vyhledávám...
Nebylo nic nalezeno
Dokumentace třídy Httpd::RequestMapper

Zpracovává HTTP požadavky, vyřizuje speciální požadavky. ...

#include <requestmapper.h>

Diagram dědičnosti pro třídu Httpd::RequestMapper:

Veřejné metody

 RequestMapper (HobrasoftHttpd::HttpConnection *parent)
 Konstruktor.
void service (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response)
 Vyřizuje jeden požadavek.

Privátní metody

void serviceShtmlFile (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response)
QByteArray readFile (const QString &path, HobrasoftHttpd::HttpResponse *response)

Privátní atributy

QString m_path
 Obsluhovaná cesta (URL adresa).
RequestAuthorizerm_authorizer

Detailní popis

Zpracovává HTTP požadavky, vyřizuje speciální požadavky.

Statické soubory a shtml stačí zpracovávat defaultním handlerem HobrasoftHttpd::HttpRequestHandler, ale požadavky dotazující vnitřní stav aplikace musejí být naprogramované v C++

Definice je uvedena na řádku 32 v souboru requestmapper.h.

Dokumentace konstruktoru a destruktoru

◆ ~RequestMapper()

RequestMapper::~RequestMapper ( )

Definice je uvedena na řádku 75 v souboru requestmapper.cpp.

75 {
76}

◆ RequestMapper()

RequestMapper::RequestMapper ( HobrasoftHttpd::HttpConnection * parent)

Konstruktor.

Definice je uvedena na řádku 79 v souboru requestmapper.cpp.

79 : HobrasoftHttpd::HttpRequestHandler(parent) {
80 // PDEBUG << parent->thread() << this->thread();
81 m_authorizer = new RequestAuthorizer(parent);
82}

Dokumentace členských funkcí

◆ readFile()

QByteArray RequestMapper::readFile ( const QString & path,
HobrasoftHttpd::HttpResponse * response )
private

Definice je uvedena na řádku 191 v souboru requestmapper.cpp.

191 {
192 QByteArray data;
193 if (path.startsWith("/..") || path.startsWith("..")) {
194 response->setStatus(403,"Forbidden");
195 response->write(QString("403 Forbidden: %1<br>\nDo not use ../ in your file path").arg(path).toUtf8());
196 response->flush();
197 throw false;
198 }
199
200 QFile file(connection()->settings()->docroot()+"/"+path);
201 if (!file.exists()) {
202 response->setStatus(404, "Not found");
203 response->write(QString("404 File not found: %1").arg(file.fileName()).toUtf8());
204 response->flush();
205 throw false;
206 }
207
208 if (!file.open(QIODevice::ReadOnly)) {
209 response->setStatus(403, "Forbidden");
210 response->write(QString("403 Forbidden: %1").arg(file.fileName()).toUtf8());
211 response->flush();
212 throw false;
213 }
214
215 QString rolename = Security::Roles::toString(m_authorizer->role());
216
217 while (!file.atEnd()) {
218 QString line = QString::fromUtf8(file.readLine());
219 line = line.replace("${ROLE}", rolename);
220 // if (line.contains(QRegExp("^\\s*<!--\\s*#include\\s+\".+\"\\s*-->\\s*$"))) {
221 if (line.contains(QRegExp(R"X(^\s*<!--\s*#include\s+['"].+['"]\s*-->\s*$)X"))) {
222 QStringList lineparts = line.split(QRegExp(R"X(['"])X"));
223 if (lineparts.size() != 3) {
224 continue;
225 }
226 data += readFile(lineparts[1], response);
227 continue;
228 }
229 data += line.toUtf8();
230 }
231
232 file.close();
233 return data;
234}
static QString toString(Role role)
Vrací název odpovídající role v textu.
Definition roles.h:31

◆ service()

void RequestMapper::service ( HobrasoftHttpd::HttpRequest * request,
HobrasoftHttpd::HttpResponse * response )

Vyřizuje jeden požadavek.

Rozděluje podle typu požadavku do specializovaných handlerů

Po přihlášení zpracovává ostatní speciální požadavky (event streamy).

Definice je uvedena na řádku 85 v souboru requestmapper.cpp.

85 {
86 m_path = request->path();
87 PDEBUG << request->method() << request->fullPath();
88
89 #define ROUTER(adresa, trida) { \
90 if (m_path.contains(QRegularExpression(adresa))) { \
91 AbstractController *controller = new trida (connection()); \
92 controller->setAuthorizer(m_authorizer); \
93 controller->service(request, response); \
94 return; \
95 } \
96 }
97
98 if (m_path.contains(QRegExp("^/public/.*\\.shtml"))) {
99 serviceShtmlFile(request, response);
100 response->flush();
101 return;
102 }
103
104 if (m_path.startsWith("/index.html") || m_path == "/") {
105 StaticFileController(connection()).service(request, response);
106 response->flush();
107 return;
108 }
109
110 if (m_path.startsWith("/public/")) {
111 StaticFileController(connection()).service(request, response);
112 response->flush();
113 return;
114 }
115
116
117 // Možné bez přihlášení
118 ROUTER("^/api/v1/overview/0x", ControllerOverviewPublic);
119 ROUTER("^/api/v1/server/about", ControllerServer);
120
121 // Kontrola přihlášení
122 if (!m_authorizer->isLoggedIn(request, response)) {
123 return;
124 }
125
129 ROUTER("^/api/v1/doors/(\\d+)/employees(?:/(\\d+))?/?", ControllerDoorEmployees);
130 ROUTER("^/api/v1/departments/(\\d+)/employees(?:/(\\d+))?/?", ControllerDepartmentEmployees);
131 ROUTER("^/api/v1/departments/(\\d+)/managers(?:/(\\d+))?/?", ControllerDepartmentHasManager);
132 ROUTER("^/api/v1/rfids/(\\d+)/employees(?:/(\\d+))?/?", ControllerRfidEmployees);
133 ROUTER("^/api/v1/categoriessiblings", ControllerCategoriesSiblings);
134 ROUTER("^/api/v1/tickettimesheets", ControllerTicketTimesheets);
135 ROUTER("^/api/v1/categoriestoroot", ControllerCategoriesToRoot);
136 ROUTER("^/api/v1/statustemplates", ControllerStatusTemplates);
137 ROUTER("^/api/v1/userscategories", ControllerUsersCategories);
138 ROUTER("^/api/v1/categoriestree", ControllerCategoriesTree);
139 ROUTER("^/api/v1/ticketvalues", ControllerTicketValues);
140 ROUTER("^/api/v1/ticketstatus", ControllerTicketStatus);
141 ROUTER("^/api/v1/ticketfiles", ControllerTicketFiles);
142 ROUTER("^/api/v1/departments", ControllerDepartments);
143 ROUTER("^/api/v1/statusorder", ControllerStatusOrder);
144 ROUTER("^/api/v1/categories", ControllerCategories);
145 ROUTER("^/api/v1/eventtypes", ControllerEventTypes);
146 ROUTER("^/api/v1/ticketsvw", ControllerTicketsVw);
147 ROUTER("^/api/v1/timesheet", ControllerTimesheet);
148 ROUTER("^/api/v1/employees", ControllerEmployees);
149 ROUTER("^/api/v1/overview", ControllerOverview);
150 ROUTER("^/api/v1/statuses", ControllerStatuses);
151 ROUTER("^/api/v1/tickets", ControllerTickets);
152 ROUTER("^/api/v1/server", ControllerServer);
153 ROUTER("^/api/v1/events", ControllerEvents);
154 ROUTER("^/api/v1/users", ControllerUsers);
155 ROUTER("^/api/v1/doors", ControllerDoors);
156 ROUTER("^/api/v1/rfids", ControllerRfids);
157 ROUTER("^/api/v1/holidays/copy/(\\d+)/(\\d+)$", ControllerHolidays);
158 ROUTER("^/api/v1/holidays", ControllerHolidays);
159 ROUTER("^/api/v1/workcalendar/generate/(\\d+)$", ControllerWorkCalendar);
160 ROUTER("^/api/v1/workcalendar", ControllerWorkCalendar);
161 ROUTER("^/api/v1/attendancechecklist", ControllerAttendanceChecklist);
162 ROUTER("^/api/v1/attendancepresent", ControllerAttendancePresent);
163 ROUTER("^/api/v1/attendancerecent", ControllerAttendanceRecent);
164 ROUTER("^/api/v1/attendancesummary", ControllerAttendanceSummary);
165
166 if (m_path.contains(QRegularExpression(".*\\.shtml"))) {
167 serviceShtmlFile(request, response);
168 response->flush();
169 return;
170 }
171
172 StaticFileController(connection()).service(request, response);
173}
QString m_path
Obsluhovaná cesta (URL adresa).

◆ serviceShtmlFile()

void RequestMapper::serviceShtmlFile ( HobrasoftHttpd::HttpRequest * request,
HobrasoftHttpd::HttpResponse * response )
private

Definice je uvedena na řádku 176 v souboru requestmapper.cpp.

176 {
177 Q_UNUSED(request);
178 QByteArray data;
179 try {
180 data = readFile(m_path, response);
181 }
182 catch (...) {
183 return;
184 }
185 response->setHeader("Content-Type", "text/html; charset=" + connection()->settings()->encoding());
186 response->write(data);
187 response->flush();
188}

Dokumentace datových členů

◆ m_authorizer

RequestAuthorizer* Httpd::RequestMapper::m_authorizer
private

Definice je uvedena na řádku 53 v souboru requestmapper.h.

◆ m_path

QString Httpd::RequestMapper::m_path
private

Obsluhovaná cesta (URL adresa).

Definice je uvedena na řádku 51 v souboru requestmapper.h.


Dokumentace pro tuto třídu byla vygenerována z následujících souborů: