cutelyst  5.0.1
A C++ Web Framework built on top of Qt, using the simple approach of Catalyst (Perl) framework.
headers.h
1 /*
2  * SPDX-FileCopyrightText: (C) 2014-2022 Daniel Nicoletti <dantti12@gmail.com>
3  * SPDX-License-Identifier: BSD-3-Clause
4  */
5 #pragma once
6 
7 #include <Cutelyst/cutelyst_export.h>
8 
9 #include <QtCore/QDateTime>
10 #include <QtCore/QMetaType>
11 #include <QtCore/QVariant>
12 
13 namespace Cutelyst {
14 
23 class CUTELYST_EXPORT Headers
24 {
25 public:
26  struct HeaderKeyValue {
27  QByteArray key;
28  QByteArray value;
29 
30  inline bool operator==(const HeaderKeyValue &other) const
31  {
32  return (key.compare(other.key, Qt::CaseInsensitive) == 0) && value == other.value;
33  }
34  };
35 
39  Headers() noexcept = default;
40 
44  Headers(const Headers &other) noexcept;
45 
49  inline Headers(std::initializer_list<std::pair<QByteArray, QByteArray>> list)
50  {
51  for (std::initializer_list<std::pair<QByteArray, QByteArray>>::const_iterator it =
52  list.begin();
53  it != list.end();
54  ++it) {
55  m_data.emplace_back(HeaderKeyValue{it->first, it->second});
56  }
57  }
58 
66  [[nodiscard]] QByteArray contentDisposition() const noexcept;
67 
71  void setCacheControl(const QByteArray &value);
72 
77  void setContentDisposition(const QByteArray &contentDisposition);
78 
84  void setContentDispositionAttachment(const QByteArray &filename = {});
85 
91  [[nodiscard]] QByteArray contentEncoding() const noexcept;
92 
97  void setContentEncoding(const QByteArray &encoding);
98 
106  [[nodiscard]] QByteArray contentType() const;
107 
112  void setContentType(const QByteArray &contentType);
113 
118  [[nodiscard]] QByteArray contentTypeCharset() const;
119 
124  void setContentTypeCharset(const QByteArray &charset);
125 
129  [[nodiscard]] bool contentIsText() const;
130 
135  [[nodiscard]] bool contentIsHtml() const;
136 
140  [[nodiscard]] bool contentIsXHtml() const;
141 
145  [[nodiscard]] bool contentIsXml() const;
146 
150  [[nodiscard]] bool contentIsJson() const;
151 
156  [[nodiscard]] qint64 contentLength() const;
157 
162  void setContentLength(qint64 value);
163 
167  QByteArray setDateWithDateTime(const QDateTime &date);
168 
172  [[nodiscard]] QDateTime date() const;
173 
179  [[nodiscard]] QByteArray ifModifiedSince() const noexcept;
180 
188  [[nodiscard]] QDateTime ifModifiedSinceDateTime() const;
189 
194  [[nodiscard]] bool ifModifiedSince(const QDateTime &lastModified) const;
195 
205  [[nodiscard]] bool ifMatch(QAnyStringView etag) const;
206 
215  [[nodiscard]] bool ifNoneMatch(QAnyStringView etag) const;
216 
222  void setETag(const QByteArray &etag);
223 
227  [[nodiscard]] QByteArray lastModified() const noexcept;
228 
232  void setLastModified(const QByteArray &value);
233 
238  QString setLastModified(const QDateTime &lastModified);
239 
244  [[nodiscard]] QByteArray server() const noexcept;
245 
250  void setServer(const QByteArray &value);
251 
256  [[nodiscard]] QByteArray connection() const noexcept;
257 
263  [[nodiscard]] QByteArray host() const noexcept;
264 
269  [[nodiscard]] QByteArray userAgent() const noexcept;
270 
275  [[nodiscard]] QByteArray referer() const noexcept;
276 
283  void setReferer(const QByteArray &value);
284 
290  void setWwwAuthenticate(const QByteArray &value);
291 
295  void setProxyAuthenticate(const QByteArray &value);
296 
300  [[nodiscard]] QByteArray authorization() const noexcept;
301 
305  [[nodiscard]] QByteArray authorizationBearer() const;
306 
312  [[nodiscard]] QByteArray authorizationBasic() const;
313 
314  struct Authorization {
315  QString user;
316  QString password;
317  };
318 
324  [[nodiscard]] Authorization authorizationBasicObject() const;
325 
331  QByteArray setAuthorizationBasic(const QString &username, const QString &password);
332 
337  [[nodiscard]] QByteArray proxyAuthorization() const noexcept;
338 
344  [[nodiscard]] QByteArray proxyAuthorizationBasic() const;
345 
351  [[nodiscard]] Authorization proxyAuthorizationBasicObject() const;
352 
356  [[nodiscard]] QByteArray header(QAnyStringView key) const noexcept;
357 
362  [[nodiscard]] QString headerAsString(QAnyStringView key) const;
363 
367  [[nodiscard]] QByteArray header(QAnyStringView key,
368  const QByteArray &defaultValue) const noexcept;
369 
374  [[nodiscard]] QString headerAsString(QAnyStringView key, const QString &defaultValue) const;
375 
379  [[nodiscard]] QByteArrayList headers(QAnyStringView key) const;
380 
385  [[nodiscard]] QStringList headersAsStrings(QAnyStringView key) const;
386 
390  void setHeader(const QByteArray &key, const QByteArray &value);
391 
395  void setHeader(const QByteArray &field, const QByteArrayList &values);
396 
400  void pushHeader(const QByteArray &key, const QByteArray &value);
401 
405  void pushHeader(const QByteArray &key, const QByteArrayList &values);
406 
410  void removeHeader(QAnyStringView key);
411 
415  inline void clear() { m_data.clear(); }
416 
420  [[nodiscard]] inline QVector<HeaderKeyValue> data() const { return m_data; }
421 
425  [[nodiscard]] bool contains(QAnyStringView key) const noexcept;
426 
427  [[nodiscard]] QByteArrayList keys() const;
428 
432  QByteArray operator[](QAnyStringView key) const noexcept;
433 
437  inline Headers &operator=(const Headers &other) noexcept
438  {
439  m_data = other.m_data;
440  return *this;
441  }
442 
446  bool operator==(const Headers &other) const noexcept;
447 
448 private:
450 };
451 
452 } // namespace Cutelyst
453 
454 Q_DECLARE_METATYPE(Cutelyst::Headers)
455 
456 QDebug CUTELYST_EXPORT operator<<(QDebug dbg, const Cutelyst::Headers &headers);
void clear()
Headers & operator=(const Headers &other) noexcept
Definition: headers.h:437
Container for HTTP headers.
Definition: headers.h:23
STL namespace.
int compare(QByteArrayView bv, Qt::CaseSensitivity cs) const const
CaseInsensitive
The Cutelyst namespace holds all public Cutelyst API.
QVector< HeaderKeyValue > data() const
Definition: headers.h:420