Cutelyst  2.13.0
request.h
1 /*
2  * Copyright (C) 2013-2018 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 
38 typedef QVector<Upload *> Uploads;
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(QVariant headers READ headers() CONSTANT)
58  Q_PROPERTY(QString contentEncoding READ contentEncoding CONSTANT)
59  Q_PROPERTY(QString contentType READ contentType CONSTANT)
60  Q_PROPERTY(QString method READ method CONSTANT)
61  Q_PROPERTY(QString protocol READ protocol CONSTANT)
62  Q_PROPERTY(QString userAgent READ userAgent CONSTANT)
63  Q_PROPERTY(QString referer READ referer CONSTANT)
64  Q_PROPERTY(QString remoteUser READ remoteUser CONSTANT)
65 public:
66  virtual ~Request();
67 
71  QHostAddress address() const;
72 
82  QString addressString() const;
83 
91  QString hostname() const;
92 
96  quint16 port() const;
97 
102  QUrl uri() const;
103 
113  QString base() const;
114 
120  QString path() const;
121 
127  QString match() const;
128 
133  void setMatch(const QString &match);
134 
151  QStringList arguments() const;
152 
157  void setArguments(const QStringList &arguments);
158 
162  inline QStringList args() const;
163 
167  QStringList captures() const;
168 
173  void setCaptures(const QStringList &captures);
174 
182  bool secure() const;
183 
189  QIODevice *body() const;
190 
204  QVariant bodyData() const;
205 
210  QJsonDocument bodyJsonDocument() const;
211 
216  QJsonObject bodyJsonObject() const;
217 
222  QJsonArray bodyJsonArray() const;
223 
229  QVariantMap bodyParametersVariant() const;
230 
234  ParamsMultiMap bodyParameters() const;
235 
239  inline QString bodyParameter(const QString &key, const QString &defaultValue = QString()) const;
240 
246  QStringList bodyParameters(const QString &key) const;
247 
251  inline ParamsMultiMap bodyParams() const;
252 
256  inline QString bodyParam(const QString &key, const QString &defaultValue = QString()) const;
257 
263  inline QStringList bodyParams(const QString &key) const;
264 
272  QString queryKeywords() const;
273 
279  QVariantMap queryParametersVariant() const;
280 
284  ParamsMultiMap queryParameters() const;
285 
289  inline QString queryParameter(const QString &key, const QString &defaultValue = QString()) const;
290 
296  QStringList queryParameters(const QString &key) const;
297 
301  inline ParamsMultiMap queryParams() const;
302 
306  inline QString queryParam(const QString &key, const QString &defaultValue = QString()) const;
307 
313  inline QStringList queryParams(const QString &key) const;
314 
318  inline QString contentEncoding() const;
319 
323  inline QString contentType() const;
324 
328  QString cookie(const QString &name) const;
329 
335  QStringList cookies(const QString &name) const;
336 
340  ParamsMultiMap cookies() const;
341 
345  inline QString header(const QString &key) const;
346 
350  Headers headers() const;
351 
355  QString method() const;
356 
360  bool isPost() const;
361 
365  bool isGet() const;
366 
370  bool isHead() const;
371 
375  bool isPut() const;
376 
380  bool isPatch() const;
381 
385  bool isDelete() const;
386 
390  QString protocol() const;
391 
396  bool xhr() const;
397 
401  inline QString userAgent() const;
402 
406  inline QString referer() const;
407 
411  QString remoteUser() const;
412 
416  QVector<Upload *> uploads() const;
417 
422  QMap<QString, Upload *> uploadsMap() const;
423 
427  Uploads uploads(const QString &name) const;
428 
434  inline Upload *upload(const QString &name) const;
435 
459  ParamsMultiMap mangleParams(const ParamsMultiMap &args, bool append = false) const;
460 
474  QUrl uriWith(const ParamsMultiMap &args, bool append = false) const;
475 
479  Engine *engine() const;
480 
484  Request(EngineRequest *engineRequest);
485 
486 Q_SIGNALS:
491  void webSocketTextFrame(const QString &message, bool isLastFrame, Cutelyst::Context *c);
492 
496  void webSocketTextMessage(const QString &message, Cutelyst::Context *c);
497 
502  void webSocketBinaryFrame(const QByteArray &message, bool isLastFrame, Cutelyst::Context *c);
503 
507  void webSocketBinaryMessage(const QByteArray &message, Cutelyst::Context *c);
508 
512  void webSocketPong(const QByteArray &payload, Cutelyst::Context *c);
513 
522  void webSocketClosed(quint16 closeCode, const QString &reason);
523 
524 protected:
525  RequestPrivate *d_ptr;
526 
527 private:
528  friend class Application;
529  friend class Dispatcher;
530  friend class DispatchType;
531  friend class Context;
532  Q_DECLARE_PRIVATE(Request)
533 };
534 
535 inline QStringList Request::args() const
536 { return arguments(); }
537 
538 inline QString Request::bodyParameter(const QString &key, const QString &defaultValue) const
539 { return bodyParameters().value(key, defaultValue); }
540 
541 inline ParamsMultiMap Request::bodyParams() const
542 { return bodyParameters(); }
543 
544 inline QString Request::bodyParam(const QString &key, const QString &defaultValue) const
545 { return bodyParameters().value(key, defaultValue); }
546 
547 inline QStringList Request::bodyParams(const QString &key) const
548 { return bodyParameters(key); }
549 
550 inline QString Request::queryParameter(const QString &key, const QString &defaultValue) const
551 { return queryParameters().value(key, defaultValue); }
552 
553 inline ParamsMultiMap Request::queryParams() const
554 { return queryParameters(); }
555 
556 inline QString Request::queryParam(const QString &key, const QString &defaultValue) const
557 { return queryParameters().value(key, defaultValue); }
558 
559 inline QStringList Request::queryParams(const QString &key) const
560 { return queryParameters(key); }
561 
562 inline QString Request::contentEncoding() const
563 { return headers().contentEncoding(); }
564 
565 inline QString Request::contentType() const
566 { return headers().contentType(); }
567 
568 inline QString Request::header(const QString &key) const
569 { return headers().header(key); }
570 
571 inline QString Request::userAgent() const
572 { return headers().userAgent(); }
573 
574 inline QString Request::referer() const
575 { return headers().referer(); }
576 
577 inline Upload *Request::upload(const QString &name) const
578 { return uploadsMap().value(name); }
579 
580 }
581 
582 #endif // CUTELYST_REQUEST_H
Cutelyst::ParamsMultiMap
QMap< QString, QString > ParamsMultiMap
Definition: paramsmultimap.h:36
Cutelyst::Request::header
QString header(const QString &key) const
Definition: request.h:568
Cutelyst::Application
The Cutelyst Application.
Definition: application.h:55
Cutelyst::Dispatcher
The Cutelyst Dispatcher.
Definition: dispatcher.h:40
Cutelyst::Request::bodyParameter
QString bodyParameter(const QString &key, const QString &defaultValue=QString()) const
Definition: request.h:538
Cutelyst::Context
The Cutelyst Context.
Definition: context.h:50
Cutelyst::Request::uploadsMap
QMap< QString, Upload * > uploadsMap() const
Definition: request.cpp:396
Cutelyst::Request::queryParameter
QString queryParameter(const QString &key, const QString &defaultValue=QString()) const
Definition: request.h:550
Cutelyst::Request::bodyParam
QString bodyParam(const QString &key, const QString &defaultValue=QString()) const
Definition: request.h:544
Cutelyst::Request
Definition: request.h:42
Cutelyst::EngineRequest
Definition: enginerequest.h:31
Cutelyst::Request::queryParam
QString queryParam(const QString &key, const QString &defaultValue=QString()) const
Definition: request.h:556
Cutelyst::DispatchType
Definition: dispatchtype.h:31
Cutelyst::Request::queryParameters
ParamsMultiMap queryParameters() const
Definition: request.cpp:263
Cutelyst::Headers
Definition: headers.h:29
Cutelyst
The Cutelyst namespace holds all public Cutelyst API.
Definition: Mainpage.dox:7
Cutelyst::Uploads
QVector< Upload * > Uploads
Definition: request.h:35
Cutelyst::Engine
The Cutelyst Engine.
Definition: engine.h:33
Cutelyst::Upload
Cutelyst Upload handles file upload request
Definition: upload.h:35
Cutelyst::Request::bodyParameters
ParamsMultiMap bodyParameters() const
Definition: request.cpp:227
Cutelyst::Request::upload
Upload * upload(const QString &name) const
Definition: request.h:577