Cutelyst  3.5.0
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 <QtCore/qobject.h>
9 #include <QtCore/qstringlist.h>
10 
11 #include <Cutelyst/cutelyst_global.h>
12 #include <Cutelyst/paramsmultimap.h>
13 #include <Cutelyst/headers.h>
14 
15 class QIODevice;
16 class QHostAddress;
17 
18 namespace Cutelyst {
19 
20 class Engine;
21 class Upload;
22 class Context;
23 
26 
27 class EngineRequest;
28 class RequestPrivate;
29 class 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)
51 public:
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 
220  ParamsMultiMap bodyParameters() const;
221 
225  inline QString bodyParameter(const QString &key, const QString &defaultValue = {}) const;
226 
232  QStringList bodyParameters(const QString &key) const;
233 
237  inline ParamsMultiMap bodyParams() const;
238 
242  inline QString bodyParam(const QString &key, const QString &defaultValue = {}) const;
243 
249  inline QStringList bodyParams(const QString &key) const;
250 
258  QString queryKeywords() const;
259 
265  QVariantMap queryParametersVariant() const;
266 
270  ParamsMultiMap queryParameters() const;
271 
275  inline QString queryParameter(const QString &key, const QString &defaultValue = {}) const;
276 
282  QStringList queryParameters(const QString &key) const;
283 
287  inline ParamsMultiMap queryParams() const;
288 
292  inline QString queryParam(const QString &key, const QString &defaultValue = {}) const;
293 
299  inline QStringList queryParams(const QString &key) const;
300 
304  inline QString contentEncoding() const;
305 
309  inline QString contentType() const;
310 
314  QString cookie(const QString &name) const;
315 
321  QStringList cookies(const QString &name) const;
322 
326  ParamsMultiMap cookies() const;
327 
331  inline QString header(const QString &key) const;
332 
336  Headers headers() const noexcept;
337 
341  QString method() const noexcept;
342 
346  bool isPost() const noexcept;
347 
351  bool isGet() const noexcept;
352 
356  bool isHead() const noexcept;
357 
361  bool isPut() const noexcept;
362 
366  bool isPatch() const noexcept;
367 
371  bool isDelete() const noexcept;
372 
376  QString protocol() const noexcept;
377 
382  bool xhr() const noexcept;
383 
387  inline QString userAgent() const;
388 
392  inline QString referer() const;
393 
397  QString remoteUser() const noexcept;
398 
402  QVector<Upload *> uploads() const;
403 
408  QMultiMap<QString, Upload *> uploadsMap() const;
409 
413  Uploads uploads(const QString &name) const;
414 
420  inline Upload *upload(const QString &name) const;
421 
445  ParamsMultiMap mangleParams(const ParamsMultiMap &args, bool append = false) const;
446 
460  QUrl uriWith(const ParamsMultiMap &args, bool append = false) const;
461 
465  Engine *engine() const noexcept;
466 
470  Request(EngineRequest *engineRequest);
471 
472 Q_SIGNALS:
477  void webSocketTextFrame(const QString &message, bool isLastFrame, Cutelyst::Context *c);
478 
482  void webSocketTextMessage(const QString &message, Cutelyst::Context *c);
483 
488  void webSocketBinaryFrame(const QByteArray &message, bool isLastFrame, Cutelyst::Context *c);
489 
493  void webSocketBinaryMessage(const QByteArray &message, Cutelyst::Context *c);
494 
498  void webSocketPong(const QByteArray &payload, Cutelyst::Context *c);
499 
508  void webSocketClosed(quint16 closeCode, const QString &reason);
509 
510 protected:
511  RequestPrivate *d_ptr;
512 
513 private:
514  friend class Application;
515  friend class Dispatcher;
516  friend class DispatchType;
517  friend class Context;
518  Q_DECLARE_PRIVATE(Request)
519 };
520 
521 inline QStringList Request::args() const
522 { return arguments(); }
523 
524 inline QString Request::bodyParameter(const QString &key, const QString &defaultValue) const
525 { return bodyParameters().value(key, defaultValue); }
526 
527 inline ParamsMultiMap Request::bodyParams() const
528 { return bodyParameters(); }
529 
530 inline QString Request::bodyParam(const QString &key, const QString &defaultValue) const
531 { return bodyParameters().value(key, defaultValue); }
532 
533 inline QStringList Request::bodyParams(const QString &key) const
534 { return bodyParameters(key); }
535 
536 inline QString Request::queryParameter(const QString &key, const QString &defaultValue) const
537 { return queryParameters().value(key, defaultValue); }
538 
540 { return queryParameters(); }
541 
542 inline QString Request::queryParam(const QString &key, const QString &defaultValue) const
543 { return queryParameters().value(key, defaultValue); }
544 
545 inline QStringList Request::queryParams(const QString &key) const
546 { return queryParameters(key); }
547 
548 inline QString Request::contentEncoding() const
549 { return headers().contentEncoding(); }
550 
551 inline QString Request::contentType() const
552 { return headers().contentType(); }
553 
554 inline QString Request::header(const QString &key) const
555 { return headers().header(key); }
556 
557 inline QString Request::userAgent() const
558 { return headers().userAgent(); }
559 
560 inline QString Request::referer() const
561 { return headers().referer(); }
562 
563 inline Upload *Request::upload(const QString &name) const
564 { return uploadsMap().value(name); }
565 
566 }
567 
568 #endif // CUTELYST_REQUEST_H
QString contentEncoding() const
Definition: headers.cpp:47
QString contentType() const
Definition: headers.cpp:57
QString userAgent() const
QStringList args() const
QStringList arguments() const noexcept
ParamsMultiMap bodyParams() const
QString queryParam(const QString &key, const QString &defaultValue={}) const
Definition: request.h:542
Cutelyst Upload handles file upload request
Definition: upload.h:22
QString contentType() const
ParamsMultiMap queryParams() const
ParamsMultiMap bodyParameters() const
Definition: request.cpp:214
The Cutelyst Context.
Definition: context.h:38
QString userAgent() const
Definition: headers.cpp:305
QString queryParameter(const QString &key, const QString &defaultValue={}) const
Definition: request.h:536
QMultiMap< QString, Upload * > uploadsMap() const
Definition: request.cpp:383
Upload * upload(const QString &name) const
Definition: request.h:563
Headers headers() const noexcept
Definition: request.cpp:308
QString referer() const
QString header(const QString &key) const
Definition: request.h:554
QString header(const QString &field) const
Definition: headers.cpp:390
The Cutelyst namespace holds all public Cutelyst API.
Definition: Mainpage.dox:7
QString contentEncoding() const
ParamsMultiMap queryParameters() const
Definition: request.cpp:250
The Cutelyst Application.
Definition: application.h:42
QVector< Upload * > Uploads
Definition: request.h:22
QString bodyParam(const QString &key, const QString &defaultValue={}) const
Definition: request.h:530
QString bodyParameter(const QString &key, const QString &defaultValue={}) const
Definition: request.h:524
The Cutelyst Engine
Definition: engine.h:20
The Cutelyst Dispatcher.
Definition: dispatcher.h:27
QString referer() const
Definition: headers.cpp:310
const T value(const Key &key, const T &defaultValue) const const