cutelyst 4.0.0
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;
17class QNetworkCookie;
18
19namespace Cutelyst {
20
21class Engine;
22class Upload;
23class Context;
24
26typedef QVector<Upload *> Uploads;
27
28class EngineRequest;
29class RequestPrivate;
30class CUTELYST_LIBRARY Request final : public QObject
31{
32 Q_OBJECT
33 Q_PROPERTY(QString hostname READ hostname CONSTANT)
34 Q_PROPERTY(quint16 port READ port CONSTANT)
35 Q_PROPERTY(QUrl uri READ uri CONSTANT)
36 Q_PROPERTY(QString base READ base CONSTANT)
37 Q_PROPERTY(QString path READ path CONSTANT)
38 Q_PROPERTY(QString match READ match CONSTANT)
39 Q_PROPERTY(QStringList arguments READ arguments CONSTANT)
40 Q_PROPERTY(QStringList args READ arguments CONSTANT)
41 Q_PROPERTY(bool secure READ secure CONSTANT)
42 Q_PROPERTY(QVariant bodyData READ bodyData CONSTANT)
43 Q_PROPERTY(Cutelyst::ParamsMultiMap bodyParams READ bodyParameters CONSTANT)
44 Q_PROPERTY(Cutelyst::ParamsMultiMap queryParams READ queryParameters CONSTANT)
45 Q_PROPERTY(QByteArray contentEncoding READ contentEncoding CONSTANT)
46 Q_PROPERTY(QByteArray contentType READ contentType CONSTANT)
47 Q_PROPERTY(QByteArray method READ method CONSTANT)
48 Q_PROPERTY(QByteArray protocol READ protocol CONSTANT)
49 Q_PROPERTY(QByteArray userAgent READ userAgent CONSTANT)
50 Q_PROPERTY(QByteArray referer READ referer CONSTANT)
51 Q_PROPERTY(QString remoteUser READ remoteUser CONSTANT)
52public:
53 virtual ~Request();
54
58 [[nodiscard]] QHostAddress address() const noexcept;
59
69 [[nodiscard]] QString addressString() const;
70
78 [[nodiscard]] QString hostname() const;
79
83 [[nodiscard]] quint16 port() const noexcept;
84
89 [[nodiscard]] QUrl uri() const;
90
100 [[nodiscard]] QString base() const;
101
107 [[nodiscard]] QString path() const noexcept;
108
114 [[nodiscard]] QString match() const noexcept;
115
120 void setMatch(const QString &match);
121
138 [[nodiscard]] QStringList arguments() const noexcept;
139
144 void setArguments(const QStringList &arguments);
145
149 [[nodiscard]] inline QStringList args() const noexcept;
150
154 [[nodiscard]] QStringList captures() const noexcept;
155
160 void setCaptures(const QStringList &captures);
161
169 [[nodiscard]] bool secure() const noexcept;
170
176 [[nodiscard]] QIODevice *body() const noexcept;
177
191 [[nodiscard]] QVariant bodyData() const;
192
197 [[nodiscard]] QJsonDocument bodyJsonDocument() const;
198
203 [[nodiscard]] QJsonObject bodyJsonObject() const;
204
209 [[nodiscard]] QJsonArray bodyJsonArray() const;
210
216 [[nodiscard]] QVariantMap bodyParametersVariant() const;
217
222 [[nodiscard]] ParamsMultiMap bodyParameters() const;
223
227 [[nodiscard]] inline QString bodyParameter(const QString &key,
228 const QString &defaultValue = {}) const;
229
235 [[nodiscard]] QStringList bodyParameters(const QString &key) const;
236
240 [[nodiscard]] inline ParamsMultiMap bodyParams() const;
241
245 [[nodiscard]] inline QString bodyParam(const QString &key,
246 const QString &defaultValue = {}) const;
247
253 [[nodiscard]] inline QStringList bodyParams(const QString &key) const;
254
262 [[nodiscard]] QString queryKeywords() const;
263
269 [[nodiscard]] QVariantMap queryParametersVariant() const;
270
274 [[nodiscard]] ParamsMultiMap queryParameters() const;
275
280 [[nodiscard]] inline QString queryParameter(const QString &key,
281 const QString &defaultValue = {}) const;
282
288 [[nodiscard]] QStringList queryParameters(const QString &key) const;
289
293 [[nodiscard]] inline ParamsMultiMap queryParams() const;
294
299 [[nodiscard]] inline QString queryParam(const QString &key,
300 const QString &defaultValue = {}) const;
301
307 [[nodiscard]] inline QStringList queryParams(const QString &key) const;
308
312 [[nodiscard]] inline QByteArray contentEncoding() const noexcept;
313
317 [[nodiscard]] inline QByteArray contentType() const;
318
319 struct Cookie {
320 QByteArray name;
321 QByteArray value;
322 };
323
327 [[nodiscard]] QByteArray cookie(QByteArrayView name) const;
328
334 [[nodiscard]] QByteArrayList cookies(QByteArrayView name) const;
335
339 [[nodiscard]] QMultiMap<QByteArrayView, Cookie> cookies() const;
340
344 [[nodiscard]] inline QByteArray header(QByteArrayView key) const noexcept;
345
349 [[nodiscard]] Headers headers() const noexcept;
350
354 [[nodiscard]] QByteArray method() const noexcept;
355
359 [[nodiscard]] bool isPost() const noexcept;
360
364 [[nodiscard]] bool isGet() const noexcept;
365
369 [[nodiscard]] bool isHead() const noexcept;
370
374 [[nodiscard]] bool isPut() const noexcept;
375
379 [[nodiscard]] bool isPatch() const noexcept;
380
384 [[nodiscard]] bool isDelete() const noexcept;
385
389 [[nodiscard]] QByteArray protocol() const noexcept;
390
395 [[nodiscard]] bool xhr() const noexcept;
396
400 [[nodiscard]] inline QByteArray userAgent() const noexcept;
401
405 [[nodiscard]] inline QByteArray referer() const noexcept;
406
410 [[nodiscard]] QString remoteUser() const noexcept;
411
415 [[nodiscard]] QVector<Upload *> uploads() const;
416
421 [[nodiscard]] QMultiMap<QStringView, Upload *> uploadsMap() const;
422
426 [[nodiscard]] Uploads uploads(QStringView name) const;
427
433 [[nodiscard]] inline Upload *upload(QStringView name) const;
434
458 [[nodiscard]] ParamsMultiMap mangleParams(const ParamsMultiMap &args,
459 bool append = false) const;
460
474 [[nodiscard]] QUrl uriWith(const ParamsMultiMap &args, bool append = false) const;
475
479 [[nodiscard]] Engine *engine() const noexcept;
480
484 Request(EngineRequest *engineRequest);
485
486Q_SIGNALS:
491 void webSocketTextFrame(const QString &message, bool isLastFrame, Cutelyst::Context *c);
492
497 void webSocketTextMessage(const QString &message, Cutelyst::Context *c);
498
503 void webSocketBinaryFrame(const QByteArray &message, bool isLastFrame, Cutelyst::Context *c);
504
509 void webSocketBinaryMessage(const QByteArray &message, Cutelyst::Context *c);
510
514 void webSocketPong(const QByteArray &payload, Cutelyst::Context *c);
515
524 void webSocketClosed(quint16 closeCode, const QString &reason);
525
526protected:
527 RequestPrivate *d_ptr;
528
529private:
530 friend class Application;
531 friend class Dispatcher;
532 friend class DispatchType;
533 friend class Context;
534 Q_DECLARE_PRIVATE(Request)
535};
536
537inline QStringList Request::args() const noexcept
538{
539 return arguments();
540}
541
542inline QString Request::bodyParameter(const QString &key, const QString &defaultValue) const
543{
544 return bodyParameters().value(key, defaultValue);
545}
546
547inline ParamsMultiMap Request::bodyParams() const
548{
549 return bodyParameters();
550}
551
552inline QString Request::bodyParam(const QString &key, const QString &defaultValue) const
553{
554 return bodyParameters().value(key, defaultValue);
555}
556
557inline QStringList Request::bodyParams(const QString &key) const
558{
559 return bodyParameters(key);
560}
561
562inline QString Request::queryParameter(const QString &key, const QString &defaultValue) const
563{
564 return queryParameters().value(key, defaultValue);
565}
566
567inline ParamsMultiMap Request::queryParams() const
568{
569 return queryParameters();
570}
571
572inline QString Request::queryParam(const QString &key, const QString &defaultValue) const
573{
574 return queryParameters().value(key, defaultValue);
575}
576
577inline QStringList Request::queryParams(const QString &key) const
578{
579 return queryParameters(key);
580}
581
582inline QByteArray Request::contentEncoding() const noexcept
583{
584 return headers().contentEncoding();
585}
586
587inline QByteArray Request::contentType() const
588{
589 return headers().contentType();
590}
591
592inline QByteArray Request::header(QByteArrayView key) const noexcept
593{
594 return headers().header(key);
595}
596
597inline QByteArray Request::userAgent() const noexcept
598{
599 return headers().userAgent();
600}
601
602inline QByteArray Request::referer() const noexcept
603{
604 return headers().referer();
605}
606
607inline Upload *Request::upload(QStringView name) const
608{
609 return uploadsMap().value(name);
610}
611
612} // namespace Cutelyst
613
614#endif // CUTELYST_REQUEST_H
The Cutelyst Application.
Definition: application.h:43
The Cutelyst Context.
Definition: context.h:38
The Cutelyst Dispatcher.
Definition: dispatcher.h:27
The Cutelyst Engine.
Definition: engine.h:20
Cutelyst Upload handles file upload request
Definition: upload.h:22
The Cutelyst namespace holds all public Cutelyst API.
Definition: Mainpage.dox:8
QVector< Upload * > Uploads
Definition: request.h:26
QMultiMap< QString, QString > ParamsMultiMap