2 #include <boost/algorithm/string/trim.hpp> 35 std::unordered_map<std::string, std::string>
jar;
45 void set_cookie(
const std::string& key,
const std::string& value)
53 int count = req.
headers.count(
"Cookie");
64 while(pos < cookies.size())
66 size_t pos_equal = cookies.find(
'=', pos);
67 if (pos_equal == cookies.npos)
69 std::string
name = cookies.substr(pos, pos_equal-pos);
72 while(pos < cookies.size() && cookies[pos] ==
' ') pos++;
73 if (pos == cookies.size())
78 if (cookies[pos] ==
'"')
80 int dquote_meet_count = 0;
82 size_t pos_dquote = pos-1;
85 pos_dquote = cookies.find(
'"', pos_dquote+1);
87 }
while(pos_dquote < cookies.size() && cookies[pos_dquote-1] ==
'\\');
88 if (pos_dquote == cookies.npos)
91 if (dquote_meet_count == 1)
92 value = cookies.substr(pos, pos_dquote - pos);
96 value.reserve(pos_dquote-pos);
97 for(
size_t p = pos; p < pos_dquote; p++)
100 if (cookies[p] ==
'\\' && p + 1 < pos_dquote)
103 if (cookies[p] ==
'\\' || cookies[p] ==
'"')
116 ctx.
jar.emplace(std::move(
name), std::move(value));
117 pos = cookies.find(
";", pos_dquote+1);
118 if (pos == cookies.npos)
121 while(pos < cookies.size() && cookies[pos] ==
' ') pos++;
122 if (pos == cookies.size())
127 size_t pos_semicolon = cookies.find(
';', pos);
128 value = cookies.substr(pos, pos_semicolon - pos);
130 ctx.
jar.emplace(std::move(
name), std::move(value));
132 if (pos == cookies.npos)
135 while(pos < cookies.size() && cookies[pos] ==
' ') pos++;
136 if (pos == cookies.size())
146 res.
add_header(
"Set-Cookie", cookie.first +
"=" + cookie.second);
Definition: http_response.h:12
Definition: http_request.h:23
void set_cookie(const std::string &key, const std::string &value)
Definition: middleware.h:45
std::string trim(const std::string &str, const std::string &trimChars)
Definition: minicsv.h:88
std::string get_cookie(const std::string &key)
Definition: middleware.h:38
ci_map headers
Definition: http_request.h:29
const std::string & get_header_value(const std::string &key) const
Definition: http_request.h:50
int code
Definition: http_response.h:17
void before_handle(request &req, response &res, context &ctx)
Definition: middleware.h:51
std::unordered_map< std::string, std::string > jar
Definition: middleware.h:35
Definition: middleware.h:33
void after_handle(request &, response &res, context &ctx)
Definition: middleware.h:142
std::unordered_map< std::string, std::string > cookies_to_add
Definition: middleware.h:36
const char * name
Definition: simplewallet.cpp:180
void end()
Definition: http_response.h:93
void add_header(std::string key, std::string value)
Definition: http_response.h:29
Definition: middleware.h:31