10 #include "CookieService.hpp"
11 #include <pion/PionAlgorithms.hpp>
12 #include <pion/net/HTTPResponseWriter.hpp>
15 using namespace pion::net;
24 void CookieService::operator()(HTTPRequestPtr& request, TCPConnectionPtr& tcp_conn)
26 static const std::string HEADER_HTML =
"<html>\n<head>\n<title>Cookie Service</title>\n"
27 "</head>\n<body>\n\n<h1>Cookie Service</h1>\n";
28 static const std::string FOOTER_HTML =
"\n</body>\n</html>\n";
31 HTTPResponseWriterPtr writer(HTTPResponseWriter::create(tcp_conn, *request,
32 boost::bind(&TCPConnection::finish, tcp_conn)));
33 writer->getResponse().setContentType(HTTPTypes::CONTENT_TYPE_HTML);
34 writer->writeNoCopy(HEADER_HTML);
37 if (request->hasQuery(
"action")) {
40 const std::string cookie_name(request->getQuery(
"cookie_name"));
41 const std::string cookie_value(request->getQuery(
"cookie_value"));
42 if (cookie_name.empty() || cookie_value.empty()) {
43 writer <<
"\n<p>[Error: You must specify a name and value to add a cookie]</p>\n\n";
45 writer->getResponse().setCookie(cookie_name, cookie_value);
46 writer <<
"\n<p>[Added cookie "
47 << cookie_name <<
'=' << cookie_value <<
"]</p>\n\n";
49 }
else if (request->getQuery(
"action") ==
"delete") {
50 const std::string cookie_name(request->getQuery(
"cookie_name"));
51 if (cookie_name.empty()) {
52 writer <<
"\n<p>[Error: You must specify a name to delete a cookie]</p>\n\n";
54 writer->getResponse().deleteCookie(cookie_name);
55 writer <<
"\n<p>[Deleted cookie " << cookie_name <<
"]</p>\n\n";
58 writer <<
"\n<p>[Error: Unrecognized action]</p>\n\n";
63 if (request->hasHeader(HTTPTypes::HEADER_COOKIE)) {
64 writer <<
"\n<h2>Cookie Headers</h2>\n<ul>\n";
65 std::pair<HTTPTypes::Headers::const_iterator, HTTPTypes::Headers::const_iterator>
66 header_pair = request->getHeaders().equal_range(HTTPTypes::HEADER_COOKIE);
67 for (HTTPTypes::Headers::const_iterator header_iterator = header_pair.first;
68 header_iterator != request->getHeaders().end()
69 && header_iterator != header_pair.second; ++header_iterator)
71 writer <<
"<li>Cookie: " << header_iterator->second <<
"\n";
73 writer <<
"</ul>\n\n";
75 writer <<
"\n<h2>No Cookie Headers</h2>\n\n";
80 if (! cookie_params.empty()) {
81 writer <<
"\n<h2>Cookie Variables</h2>\n<ul>\n";
82 for (HTTPTypes::CookieParams::const_iterator i = cookie_params.begin();
83 i != cookie_params.end(); ++i)
85 writer <<
"<li>" << i->first <<
": " << i->second
86 <<
" <a href=\"" << request->getResource()
87 <<
"?action=delete&cookie_name=" << i->first
88 <<
"\">[Delete]</a>\n";
90 writer <<
"</ul>\n\n";
92 writer <<
"\n<h2>No Cookie Variables</h2>\n\n";
96 writer <<
"\n<h2>Add Cookie</h2>\n"
97 "<p><form action=\"" << request->getResource() <<
"\" method=\"POST\">\n"
98 "Name: <input type=\"text\" name=\"cookie_name\"><br />\n"
99 "Value: <input type=\"text\" name=\"cookie_value\"><br />\n"
100 "<input type=\"submit\" name=\"action\" value=\"Add Cookie\"></p>\n"
104 writer->writeNoCopy(FOOTER_HTML);