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 
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 
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 
475 Q_SIGNALS:
480  void webSocketTextFrame(const QString &message, bool isLastFrame, Cutelyst::Context *c);
481 
486  void webSocketTextMessage(const QString &message, Cutelyst::Context *c);
487 
492  void webSocketBinaryFrame(const QByteArray &message, bool isLastFrame, Cutelyst::Context *c);
493 
498  void webSocketBinaryMessage(const QByteArray &message, Cutelyst::Context *c);
499 
503  void webSocketPong(const QByteArray &payload, Cutelyst::Context *c);
504 
513  void webSocketClosed(quint16 closeCode, const QString &reason);
514 
515 protected:
516  RequestPrivate *d_ptr;
517 
518 private:
519  friend class Application;
520  friend class Dispatcher;
521  friend class DispatchType;
522  friend class Context;
523  Q_DECLARE_PRIVATE(Request)
524 };
525 
526 inline QStringList Request::args() const
527 {
528  return arguments();
529 }
530 
531 inline QString Request::bodyParameter(const QString &key, const QString &defaultValue) const
532 {
533  return bodyParameters().value(key, defaultValue);
534 }
535 
536 inline ParamsMultiMap Request::bodyParams() const
537 {
538  return bodyParameters();
539 }
540 
541 inline QString Request::bodyParam(const QString &key, const QString &defaultValue) const
542 {
543  return bodyParameters().value(key, defaultValue);
544 }
545 
546 inline QStringList Request::bodyParams(const QString &key) const
547 {
548  return bodyParameters(key);
549 }
550 
551 inline QString Request::queryParameter(const QString &key, const QString &defaultValue) const
552 {
553  return queryParameters().value(key, defaultValue);
554 }
555 
557 {
558  return queryParameters();
559 }
560 
561 inline QString Request::queryParam(const QString &key, const QString &defaultValue) const
562 {
563  return queryParameters().value(key, defaultValue);
564 }
565 
566 inline QStringList Request::queryParams(const QString &key) const
567 {
568  return queryParameters(key);
569 }
570 
571 inline QString Request::contentEncoding() const
572 {
573  return headers().contentEncoding();
574 }
575 
576 inline QString Request::contentType() const
577 {
578  return headers().contentType();
579 }
580 
581 inline QString Request::header(const QString &key) const
582 {
583  return headers().header(key);
584 }
585 
586 inline QString Request::userAgent() const
587 {
588  return headers().userAgent();
589 }
590 
591 inline QString Request::referer() const
592 {
593  return headers().referer();
594 }
595 
596 inline Upload *Request::upload(const QString &name) const
597 {
598  return uploadsMap().value(name);
599 }
600 
601 } // namespace Cutelyst
602 
603 #endif // CUTELYST_REQUEST_H
QString contentEncoding() const
Definition: headers.cpp:48
QString contentType() const
Definition: headers.cpp:58
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:561
Cutelyst Upload handles file upload request
Definition: upload.h:22
QString contentType() const
ParamsMultiMap queryParams() const
ParamsMultiMap bodyParameters() const
Definition: request.cpp:216
The Cutelyst Context.
Definition: context.h:38
QString userAgent() const
Definition: headers.cpp:301
QString queryParameter(const QString &key, const QString &defaultValue={}) const
Definition: request.h:551
QMultiMap< QString, Upload * > uploadsMap() const
Definition: request.cpp:386
Upload * upload(const QString &name) const
Definition: request.h:596
Headers headers() const noexcept
Definition: request.cpp:310
QString referer() const
QString header(const QString &key) const
Definition: request.h:581
QString header(const QString &field) const
Definition: headers.cpp:386
The Cutelyst namespace holds all public Cutelyst API.
Definition: Mainpage.dox:7
QString contentEncoding() const
ParamsMultiMap queryParameters() const
Definition: request.cpp:252
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:541
QString bodyParameter(const QString &key, const QString &defaultValue={}) const
Definition: request.h:531
The Cutelyst Engine
Definition: engine.h:20
The Cutelyst Dispatcher.
Definition: dispatcher.h:27
QString referer() const
Definition: headers.cpp:306
T value(const Key &key, const T &defaultValue) const const