35 lines
956 B
C
35 lines
956 B
C
|
#pragma once
|
||
|
|
||
|
#include <string>
|
||
|
#include <unordered_map>
|
||
|
|
||
|
namespace VWeb {
|
||
|
enum class CookieSameSite { Invalid = 0, Strict, Lax, None };
|
||
|
struct Cookie {
|
||
|
std::string Name{};
|
||
|
std::string Value{};
|
||
|
std::string Expires{};
|
||
|
int MaxAge{};
|
||
|
std::string Domain{};
|
||
|
std::string Path{"/"};
|
||
|
bool Secure{};
|
||
|
bool HttpOnly{};
|
||
|
CookieSameSite SameSite{CookieSameSite::Strict};
|
||
|
bool IsOld = false;
|
||
|
};
|
||
|
struct Cookies {
|
||
|
public:
|
||
|
void Remove(const std::string &name);
|
||
|
bool Has(const std::string &name) const;
|
||
|
Cookie &Get(const std::string &name) { return Data[name]; };
|
||
|
std::string TransformToHeader();
|
||
|
void CreateCookieFromString(const std::string &data);
|
||
|
void CreateOld(const std::string &name, const std::string &value);
|
||
|
|
||
|
std::unordered_map<std::string, Cookie> Data;
|
||
|
Cookie &operator[](const std::string &name) { return Data[name]; }
|
||
|
|
||
|
protected:
|
||
|
static void CookieToString(std::stringstream &stream, Cookie &cookie);
|
||
|
};
|
||
|
} // namespace VWeb
|