cutelyst 3.9.1
A C++ Web Framework built on top of Qt, using the simple approach of Catalyst (Perl) framework.
request.h
1/*
2 * SPDX-FileCopyrightText: (C) 2013-2022 Daniel Nicoletti <dantti12@gmail.com>
3 * SPDX-License-Identifier: BSD-3-Clause
4 */
5#ifndef CUTELYST_REQUEST_H
6#define CUTELYST_REQUEST_H
7
8#include <Cutelyst/cutelyst_global.h>
9#include <Cutelyst/headers.h>
10#include <Cutelyst/paramsmultimap.h>
11
12#include <QtCore/qobject.h>
13#include <QtCore/qstringlist.h>
14
15class QIODevice;
16class QHostAddress;
17
18namespace Cutelyst {
19
20class Engine;
21class Upload;
22class Context;
23
26
27class EngineRequest;
28class RequestPrivate;
29class CUTELYST_LIBRARY Request final : public QObject
30{
31 Q_OBJECT
32 Q_PROPERTY(QString hostname READ hostname CONSTANT)
33 Q_PROPERTY(quint16 port READ port CONSTANT)
34 Q_PROPERTY(QUrl uri READ uri CONSTANT)
35 Q_PROPERTY(QString base READ base CONSTANT)
36 Q_PROPERTY(QString path READ path CONSTANT)
37 Q_PROPERTY(QString match READ match CONSTANT)
38 Q_PROPERTY(QStringList arguments READ arguments CONSTANT)
39 Q_PROPERTY(QStringList args READ arguments CONSTANT)
40 Q_PROPERTY(bool secure READ secure CONSTANT)
41 Q_PROPERTY(QVariant bodyData READ bodyData CONSTANT)
42 Q_PROPERTY(Cutelyst::ParamsMultiMap bodyParams READ bodyParameters CONSTANT)
43 Q_PROPERTY(Cutelyst::ParamsMultiMap queryParams READ queryParameters CONSTANT)
44 Q_PROPERTY(QString contentEncoding READ contentEncoding CONSTANT)
45 Q_PROPERTY(QString contentType READ contentType CONSTANT)
46 Q_PROPERTY(QString method READ method CONSTANT)
47 Q_PROPERTY(QString protocol READ protocol CONSTANT)
48 Q_PROPERTY(QString userAgent READ userAgent CONSTANT)
49 Q_PROPERTY(QString referer READ referer CONSTANT)
50 Q_PROPERTY(QString remoteUser READ remoteUser CONSTANT)
51public:
52 virtual ~Request();
53
57 QHostAddress address() const noexcept;
58
68 QString addressString() const;
69
77 QString hostname() const;
78
82 quint16 port() const;
83
88 QUrl uri() const;
89
99 QString base() const;
100
106 QString path() const noexcept;
107
113 QString match() const noexcept;
114
119 void setMatch(const QString &match);
120
137 QStringList arguments() const noexcept;
138
143 void setArguments(const QStringList &arguments);
144
148 inline QStringList args() const;
149
153 QStringList captures() const noexcept;
154
159 void setCaptures(const QStringList &captures);
160
168 bool secure() const noexcept;
169
175 QIODevice *body() const;
176
190 QVariant bodyData() const;
191
196 QJsonDocument bodyJsonDocument() const;
197
202 QJsonObject bodyJsonObject() const;
203
208 QJsonArray bodyJsonArray() const;
209
215 QVariantMap bodyParametersVariant() const;
216
221 ParamsMultiMap bodyParameters() const;
222
226 inline QString bodyParameter(const QString &key, const QString &defaultValue = {}) const;
227
233 QStringList bodyParameters(const QString &key) const;
234
238 inline ParamsMultiMap bodyParams() const;
239
243 inline QString bodyParam(const QString &key, const QString &defaultValue = {}) const;
244
250 inline QStringList bodyParams(const QString &key) const;
251
259 QString queryKeywords() const;
260
266 QVariantMap queryParametersVariant() const;
267
271 ParamsMultiMap queryParameters() const;
272
277 inline QString queryParameter(const QString &key, const QString &defaultValue = {}) const;
278
284 QStringList queryParameters(const QString &key) const;
285
289 inline ParamsMultiMap queryParams() const;
290
295 inline QString queryParam(const QString &key, const QString &defaultValue = {}) const;
296
302 inline QStringList queryParams(const QString &key) const;
303
307 inline QString contentEncoding() const;
308
312 inline QString contentType() const;
313
317 QString cookie(const QString &name) const;
318
324 QStringList cookies(const QString &name) const;
325
329 ParamsMultiMap cookies() const;
330
334 inline QString header(const QString &key) const;
335
339 Headers headers() const noexcept;
340
344 QString method() const noexcept;
345
349 bool isPost() const noexcept;
350
354 bool isGet() const noexcept;
355
359 bool isHead() const noexcept;
360
364 bool isPut() const noexcept;
365
369 bool isPatch() const noexcept;
370
374 bool isDelete() const noexcept;
375
379 QString protocol() const noexcept;
380
385 bool xhr() const noexcept;
386
390 inline QString userAgent() const;
391
395 inline QString referer() const;
396
400 QString remoteUser() const noexcept;
401
405 QVector<Upload *> uploads() const;
406
411 QMultiMap<QString, Upload *> uploadsMap() const;
412
416 Uploads uploads(const QString &name) const;
417
423 inline Upload *upload(const QString &name) const;
424
448 ParamsMultiMap mangleParams(const ParamsMultiMap &args, bool append = false) const;
449
463 QUrl uriWith(const ParamsMultiMap &args, bool append = false) const;
464
468 Engine *engine() const noexcept;
469
473 Request(EngineRequest *engineRequest);
474
475Q_SIGNALS:
480 void webSocketTextFrame(const QString &message, bool isLastFrame, Cutelyst::Context *c);
481
487
492 void webSocketBinaryFrame(const QByteArray &message, bool isLastFrame, Cutelyst::Context *c);
493
499
504
513 void webSocketClosed(quint16 closeCode, const QString &reason);
514
515protected:
516 RequestPrivate *d_ptr;
517
518private:
519 friend class Application;
520 friend class Dispatcher;
521 friend class DispatchType;
522 friend class Context;
523 Q_DECLARE_PRIVATE(Request)
524};
525
526inline QStringList Request::args() const
527{
528 return arguments();
529}
530
531inline QString Request::bodyParameter(const QString &key, const QString &defaultValue) const
532{
533 return bodyParameters().value(key, defaultValue);
534}
535
536inline ParamsMultiMap Request::bodyParams() const
537{
538 return bodyParameters();
539}
540
541inline QString Request::bodyParam(const QString &key, const QString &defaultValue) const
542{
543 return bodyParameters().value(key, defaultValue);
544}
545
546inline QStringList Request::bodyParams(const QString &key) const
547{
548 return bodyParameters(key);
549}
550
551inline QString Request::queryParameter(const QString &key, const QString &defaultValue) const
552{
553 return queryParameters().value(key, defaultValue);
554}
555
556inline ParamsMultiMap Request::queryParams() const
557{
558 return queryParameters();
559}
560
561inline QString Request::queryParam(const QString &key, const QString &defaultValue) const
562{
563 return queryParameters().value(key, defaultValue);
564}
565
566inline QStringList Request::queryParams(const QString &key) const
567{
568 return queryParameters(key);
569}
570
571inline QString Request::contentEncoding() const
572{
573 return headers().contentEncoding();
574}
575
576inline QString Request::contentType() const
577{
578 return headers().contentType();
579}
580
581inline QString Request::header(const QString &key) const
582{
583 return headers().header(key);
584}
585
586inline QString Request::userAgent() const
587{
588 return headers().userAgent();
589}
590
591inline QString Request::referer() const
592{
593 return headers().referer();
594}
595
596inline Upload *Request::upload(const QString &name) const
597{
598 return uploadsMap().value(name);
599}
600
601} // namespace Cutelyst
602
603#endif // CUTELYST_REQUEST_H
The Cutelyst Application.
Definition application.h:43
The Cutelyst Context.
Definition context.h:39
The Cutelyst Dispatcher.
Definition dispatcher.h:28
The Cutelyst Engine.
Definition engine.h:21
QString contentEncoding() const
Definition headers.cpp:48
QString referer() const
Definition headers.cpp:306
QString userAgent() const
Definition headers.cpp:301
QString header(const QString &field) const
Definition headers.cpp:386
QString contentType() const
Definition headers.cpp:58
QMultiMap< QString, Upload * > uploadsMap() const
Definition request.cpp:386
void webSocketBinaryMessage(const QByteArray &message, Cutelyst::Context *c)
Emitted when the websocket receives a binary message, this accounts for all binary frames till the la...
QString queryParameter(const QString &key, const QString &defaultValue={}) const
Definition request.h:551
void webSocketBinaryFrame(const QByteArray &message, bool isLastFrame, Cutelyst::Context *c)
Emitted when the websocket receives a binary frame, this is usefull for parsing big chunks of data wi...
QString bodyParameter(const QString &key, const QString &defaultValue={}) const
Definition request.h:531
QString header(const QString &key) const
Definition request.h:581
ParamsMultiMap bodyParameters() const
Definition request.cpp:216
void webSocketTextFrame(const QString &message, bool isLastFrame, Cutelyst::Context *c)
Emitted when the websocket receives a text frame, this is usefull for parsing big chunks of data with...
void webSocketPong(const QByteArray &payload, Cutelyst::Context *c)
Emitted when the websocket receives a pong frame, which might include a payload.
void webSocketClosed(quint16 closeCode, const QString &reason)
Emitted when the websocket receives a close frame, including a close code and a reason,...
void webSocketTextMessage(const QString &message, Cutelyst::Context *c)
Emitted when the websocket receives a text message, this accounts for all text frames till the last o...
Headers headers() const noexcept
Definition request.cpp:310
ParamsMultiMap queryParameters() const
Definition request.cpp:252
QString queryParam(const QString &key, const QString &defaultValue={}) const
Definition request.h:561
QString bodyParam(const QString &key, const QString &defaultValue={}) const
Definition request.h:541
Upload * upload(const QString &name) const
Definition request.h:596
Cutelyst Upload handles file upload request
Definition upload.h:23
The Cutelyst namespace holds all public Cutelyst API.
Definition Mainpage.dox:8
QVector< Upload * > Uploads
Definition request.h:25
const T value(const Key &key, const T &defaultValue) const const