Cutelyst  3.1.0
request.h
1 /*
2  * Copyright (C) 2013-2021 Daniel Nicoletti <dantti12@gmail.com>
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 #ifndef CUTELYST_REQUEST_H
19 #define CUTELYST_REQUEST_H
20 
21 #include <QtCore/qobject.h>
22 #include <QtCore/qstringlist.h>
23 
24 #include <Cutelyst/cutelyst_global.h>
25 #include <Cutelyst/paramsmultimap.h>
26 #include <Cutelyst/headers.h>
27 
28 class QIODevice;
29 class QHostAddress;
30 
31 namespace Cutelyst {
32 
33 class Engine;
34 class Upload;
35 class Context;
36 
39 
40 class EngineRequest;
41 class RequestPrivate;
42 class CUTELYST_LIBRARY Request final : public QObject
43 {
44  Q_OBJECT
45  Q_PROPERTY(QString hostname READ hostname CONSTANT)
46  Q_PROPERTY(quint16 port READ port CONSTANT)
47  Q_PROPERTY(QUrl uri READ uri CONSTANT)
48  Q_PROPERTY(QString base READ base CONSTANT)
49  Q_PROPERTY(QString path READ path CONSTANT)
50  Q_PROPERTY(QString match READ match CONSTANT)
51  Q_PROPERTY(QStringList arguments READ arguments CONSTANT)
52  Q_PROPERTY(QStringList args READ arguments CONSTANT)
53  Q_PROPERTY(bool secure READ secure CONSTANT)
54  Q_PROPERTY(QVariant bodyData READ bodyData CONSTANT)
55  Q_PROPERTY(Cutelyst::ParamsMultiMap bodyParams READ bodyParameters CONSTANT)
56  Q_PROPERTY(Cutelyst::ParamsMultiMap queryParams READ queryParameters CONSTANT)
57  Q_PROPERTY(QString contentEncoding READ contentEncoding CONSTANT)
58  Q_PROPERTY(QString contentType READ contentType CONSTANT)
59  Q_PROPERTY(QString method READ method CONSTANT)
60  Q_PROPERTY(QString protocol READ protocol CONSTANT)
61  Q_PROPERTY(QString userAgent READ userAgent CONSTANT)
62  Q_PROPERTY(QString referer READ referer CONSTANT)
63  Q_PROPERTY(QString remoteUser READ remoteUser CONSTANT)
64 public:
65  virtual ~Request();
66 
70  QHostAddress address() const;
71 
81  QString addressString() const;
82 
90  QString hostname() const;
91 
95  quint16 port() const;
96 
101  QUrl uri() const;
102 
112  QString base() const;
113 
119  QString path() const;
120 
126  QString match() const;
127 
132  void setMatch(const QString &match);
133 
150  QStringList arguments() const;
151 
156  void setArguments(const QStringList &arguments);
157 
161  inline QStringList args() const;
162 
166  QStringList captures() const;
167 
172  void setCaptures(const QStringList &captures);
173 
181  bool secure() const;
182 
188  QIODevice *body() const;
189 
203  QVariant bodyData() const;
204 
209  QJsonDocument bodyJsonDocument() const;
210 
215  QJsonObject bodyJsonObject() const;
216 
221  QJsonArray bodyJsonArray() const;
222 
228  QVariantMap bodyParametersVariant() const;
229 
233  ParamsMultiMap bodyParameters() const;
234 
238  inline QString bodyParameter(const QString &key, const QString &defaultValue = {}) const;
239 
245  QStringList bodyParameters(const QString &key) const;
246 
250  inline ParamsMultiMap bodyParams() const;
251 
255  inline QString bodyParam(const QString &key, const QString &defaultValue = {}) const;
256 
262  inline QStringList bodyParams(const QString &key) const;
263 
271  QString queryKeywords() const;
272 
278  QVariantMap queryParametersVariant() const;
279 
283  ParamsMultiMap queryParameters() const;
284 
288  inline QString queryParameter(const QString &key, const QString &defaultValue = {}) const;
289 
295  QStringList queryParameters(const QString &key) const;
296 
300  inline ParamsMultiMap queryParams() const;
301 
305  inline QString queryParam(const QString &key, const QString &defaultValue = {}) const;
306 
312  inline QStringList queryParams(const QString &key) const;
313 
317  inline QString contentEncoding() const;
318 
322  inline QString contentType() const;
323 
327  QString cookie(const QString &name) const;
328 
334  QStringList cookies(const QString &name) const;
335 
339  ParamsMultiMap cookies() const;
340 
344  inline QString header(const QString &key) const;
345 
349  Headers headers() const;
350 
354  QString method() const;
355 
359  bool isPost() const;
360 
364  bool isGet() const;
365 
369  bool isHead() const;
370 
374  bool isPut() const;
375 
379  bool isPatch() const;
380 
384  bool isDelete() const;
385 
389  QString protocol() const;
390 
395  bool xhr() const;
396 
400  inline QString userAgent() const;
401 
405  inline QString referer() const;
406 
410  QString remoteUser() const;
411 
415  QVector<Upload *> uploads() const;
416 
421  QMultiMap<QString, Upload *> uploadsMap() const;
422 
426  Uploads uploads(const QString &name) const;
427 
433  inline Upload *upload(const QString &name) const;
434 
458  ParamsMultiMap mangleParams(const ParamsMultiMap &args, bool append = false) const;
459 
473  QUrl uriWith(const ParamsMultiMap &args, bool append = false) const;
474 
478  Engine *engine() const;
479 
483  Request(EngineRequest *engineRequest);
484 
485 Q_SIGNALS:
490  void webSocketTextFrame(const QString &message, bool isLastFrame, Cutelyst::Context *c);
491 
496 
501  void webSocketBinaryFrame(const QByteArray &message, bool isLastFrame, Cutelyst::Context *c);
502 
507 
511  void webSocketPong(const QByteArray &payload, Cutelyst::Context *c);
512 
521  void webSocketClosed(quint16 closeCode, const QString &reason);
522 
523 protected:
524  RequestPrivate *d_ptr;
525 
526 private:
527  friend class Application;
528  friend class Dispatcher;
529  friend class DispatchType;
530  friend class Context;
531  Q_DECLARE_PRIVATE(Request)
532 };
533 
534 inline QStringList Request::args() const
535 { return arguments(); }
536 
537 inline QString Request::bodyParameter(const QString &key, const QString &defaultValue) const
538 { return bodyParameters().value(key, defaultValue); }
539 
540 inline ParamsMultiMap Request::bodyParams() const
541 { return bodyParameters(); }
542 
543 inline QString Request::bodyParam(const QString &key, const QString &defaultValue) const
544 { return bodyParameters().value(key, defaultValue); }
545 
546 inline QStringList Request::bodyParams(const QString &key) const
547 { return bodyParameters(key); }
548 
549 inline QString Request::queryParameter(const QString &key, const QString &defaultValue) const
550 { return queryParameters().value(key, defaultValue); }
551 
552 inline ParamsMultiMap Request::queryParams() const
553 { return queryParameters(); }
554 
555 inline QString Request::queryParam(const QString &key, const QString &defaultValue) const
556 { return queryParameters().value(key, defaultValue); }
557 
558 inline QStringList Request::queryParams(const QString &key) const
559 { return queryParameters(key); }
560 
561 inline QString Request::contentEncoding() const
562 { return headers().contentEncoding(); }
563 
564 inline QString Request::contentType() const
565 { return headers().contentType(); }
566 
567 inline QString Request::header(const QString &key) const
568 { return headers().header(key); }
569 
570 inline QString Request::userAgent() const
571 { return headers().userAgent(); }
572 
573 inline QString Request::referer() const
574 { return headers().referer(); }
575 
576 inline Upload *Request::upload(const QString &name) const
577 { return uploadsMap().value(name); }
578 
579 }
580 
581 #endif // CUTELYST_REQUEST_H
The Cutelyst Application.
Definition: application.h:56
The Cutelyst Context.
Definition: context.h:52
The Cutelyst Dispatcher.
Definition: dispatcher.h:41
The Cutelyst Engine.
Definition: engine.h:34
QString contentEncoding() const
Definition: headers.cpp:60
QString referer() const
Definition: headers.cpp:323
QString userAgent() const
Definition: headers.cpp:318
QString header(const QString &field) const
Definition: headers.cpp:403
QString contentType() const
Definition: headers.cpp:70
QMultiMap< QString, Upload * > uploadsMap() const
Definition: request.cpp:396
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:549
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:537
QString header(const QString &key) const
Definition: request.h:567
ParamsMultiMap bodyParameters() const
Definition: request.cpp:227
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...
ParamsMultiMap queryParameters() const
Definition: request.cpp:263
QString queryParam(const QString &key, const QString &defaultValue={}) const
Definition: request.h:555
QString bodyParam(const QString &key, const QString &defaultValue={}) const
Definition: request.h:543
Upload * upload(const QString &name) const
Definition: request.h:576
Headers headers() const
Definition: request.cpp:321
Cutelyst Upload handles file upload request
Definition: upload.h:36
The Cutelyst namespace holds all public Cutelyst API.
Definition: Mainpage.dox:8
QVector< Upload * > Uploads
Definition: request.h:35
const T value(const Key &key, const T &defaultValue) const const