cutelyst 4.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_global.h>
8
9#include <QtCore/QDateTime>
10#include <QtCore/QMetaType>
11#include <QtCore/QVariant>
12
13namespace Cutelyst {
14
15class CUTELYST_LIBRARY Headers
16{
17public:
19 QByteArray key;
20 QByteArray value;
21
22 inline bool operator==(const HeaderKeyValue &other) const
23 {
24 return (key.compare(other.key, Qt::CaseInsensitive) == 0) && value == other.value;
25 }
26 };
27
31 Headers() noexcept = default;
32
36 Headers(const Headers &other) noexcept;
37
41 inline Headers(std::initializer_list<std::pair<QByteArray, QByteArray>> list)
42 {
43 for (std::initializer_list<std::pair<QByteArray, QByteArray>>::const_iterator it =
44 list.begin();
45 it != list.end();
46 ++it)
47 m_data.emplace_back(HeaderKeyValue{it->first, it->second});
48 }
49
55 [[nodiscard]] QByteArray contentDisposition() const noexcept;
56
60 void setCacheControl(const QByteArray &value);
61
66 void setContentDisposition(const QByteArray &contentDisposition);
67
73 void setContentDispositionAttachment(const QByteArray &filename = {});
74
80 [[nodiscard]] QByteArray contentEncoding() const noexcept;
81
86 void setContentEncoding(const QByteArray &encoding);
87
94 [[nodiscard]] QByteArray contentType() const;
95
100 void setContentType(const QByteArray &contentType);
101
105 [[nodiscard]] QByteArray contentTypeCharset() const;
106
111 void setContentTypeCharset(const QByteArray &charset);
112
116 [[nodiscard]] bool contentIsText() const;
117
122 [[nodiscard]] bool contentIsHtml() const;
123
127 [[nodiscard]] bool contentIsXHtml() const;
128
132 [[nodiscard]] bool contentIsXml() const;
133
137 [[nodiscard]] bool contentIsJson() const;
138
142 [[nodiscard]] qint64 contentLength() const;
143
147 void setContentLength(qint64 value);
148
152 QByteArray setDateWithDateTime(const QDateTime &date);
153
157 [[nodiscard]] QDateTime date() const;
158
164 [[nodiscard]] QByteArray ifModifiedSince() const noexcept;
165
173 [[nodiscard]] QDateTime ifModifiedSinceDateTime() const;
174
179 [[nodiscard]] bool ifModifiedSince(const QDateTime &lastModified) const;
180
190 [[nodiscard]] bool ifMatch(const QByteArray &etag) const;
191
200 [[nodiscard]] bool ifNoneMatch(const QByteArray &etag) const;
201
207 void setETag(const QByteArray &etag);
208
212 [[nodiscard]] QByteArray lastModified() const noexcept;
213
217 void setLastModified(const QByteArray &value);
218
223 QString setLastModified(const QDateTime &lastModified);
224
229 [[nodiscard]] QByteArray server() const noexcept;
230
235 void setServer(const QByteArray &value);
236
241 [[nodiscard]] QByteArray connection() const noexcept;
242
248 [[nodiscard]] QByteArray host() const noexcept;
249
254 [[nodiscard]] QByteArray userAgent() const noexcept;
255
260 [[nodiscard]] QByteArray referer() const noexcept;
261
268 void setReferer(const QByteArray &value);
269
275 void setWwwAuthenticate(const QByteArray &value);
276
280 void setProxyAuthenticate(const QByteArray &value);
281
285 [[nodiscard]] QByteArray authorization() const noexcept;
286
290 [[nodiscard]] QByteArray authorizationBearer() const;
291
297 [[nodiscard]] QByteArray authorizationBasic() const;
298
300 QString user;
301 QString password;
302 };
303
309 [[nodiscard]] Authorization authorizationBasicObject() const;
310
316 QByteArray setAuthorizationBasic(const QString &username, const QString &password);
317
322 [[nodiscard]] QByteArray proxyAuthorization() const noexcept;
323
329 [[nodiscard]] QByteArray proxyAuthorizationBasic() const;
330
336 [[nodiscard]] Authorization proxyAuthorizationBasicObject() const;
337
341 [[nodiscard]] QByteArray header(QByteArrayView key) const noexcept;
342
347 [[nodiscard]] QString headerAsString(QByteArrayView key) const;
348
352 [[nodiscard]] QByteArray header(QByteArrayView key,
353 const QByteArray &defaultValue) const noexcept;
354
359 [[nodiscard]] QString headerAsString(QByteArrayView key, const QByteArray &defaultValue) const;
360
364 [[nodiscard]] QByteArrayList headers(QByteArrayView key) const;
365
370 [[nodiscard]] QStringList headersAsStrings(QByteArrayView key) const;
371
375 void setHeader(const QByteArray &key, const QByteArray &value);
376
380 void setHeader(const QByteArray &field, const QByteArrayList &values);
381
385 void pushHeader(const QByteArray &key, const QByteArray &value);
386
390 void pushHeader(const QByteArray &key, const QByteArrayList &values);
391
395 void removeHeader(QByteArrayView key);
396
400 inline void clear() { m_data.clear(); }
401
405 [[nodiscard]] inline QVector<HeaderKeyValue> data() const { return m_data; }
406
410 [[nodiscard]] bool contains(QByteArrayView key) const noexcept;
411
412 [[nodiscard]] QByteArrayList keys() const;
413
417 QByteArray operator[](QByteArrayView key) const noexcept;
418
422 inline Headers &operator=(const Headers &other) noexcept
423 {
424 m_data = other.m_data;
425 return *this;
426 }
427
431 bool operator==(const Headers &other) const noexcept;
432
433private:
434 QVector<HeaderKeyValue> m_data;
435};
436
437} // namespace Cutelyst
438
439Q_DECLARE_METATYPE(Cutelyst::Headers)
440
441QDebug CUTELYST_LIBRARY operator<<(QDebug dbg, const Cutelyst::Headers &headers);
QVector< HeaderKeyValue > data() const
Definition: headers.h:405
Headers() noexcept=default
Headers & operator=(const Headers &other) noexcept
Definition: headers.h:422
The Cutelyst namespace holds all public Cutelyst API.
Definition: Mainpage.dox:8