cutelyst 5.0.0
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
13namespace Cutelyst {
14
23class CUTELYST_EXPORT Headers
24{
25public:
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
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
448private:
450};
451
452} // namespace Cutelyst
453
454Q_DECLARE_METATYPE(Cutelyst::Headers)
455
456QDebug CUTELYST_EXPORT operator<<(QDebug dbg, const Cutelyst::Headers &headers);
Container for HTTP headers.
Definition headers.h:24
QVector< HeaderKeyValue > data() const
Definition headers.h:420
Headers() noexcept=default
Headers & operator=(const Headers &other) noexcept
Definition headers.h:437
The Cutelyst namespace holds all public Cutelyst API.
int compare(QByteArrayView bv, Qt::CaseSensitivity cs) const const
void clear()
CaseInsensitive