version 0.3.23
[fms.git] / src / http / pages / showcaptchapage.cpp
1 #include "../../../include/http/pages/showcaptchapage.h"\r
2 #include "../../../include/base64.h"\r
3 #include "../../../include/stringfunctions.h"\r
4 \r
5 #ifdef XMEM\r
6         #include <xmem.h>\r
7 #endif\r
8 \r
9 void ShowCaptchaPage::handleRequest(Poco::Net::HTTPServerRequest &request, Poco::Net::HTTPServerResponse &response)\r
10 {\r
11         m_log->trace("ShowCaptchaPage::handleRequest from "+request.clientAddress().toString());\r
12 \r
13         std::map<std::string,std::string> queryvars;\r
14         CreateQueryVarMap(request,queryvars);\r
15 \r
16         if(request.getVersion()==Poco::Net::HTTPRequest::HTTP_1_1)\r
17         {\r
18                 response.setChunkedTransferEncoding(true);\r
19         }\r
20 \r
21         std::string content="";\r
22         if(queryvars.find("UUID")!=queryvars.end())\r
23         {\r
24                 SQLite3DB::Statement st=m_db->Prepare("SELECT MimeType,PuzzleData FROM tblIntroductionPuzzleRequests WHERE Type='captcha' AND UUID=?;");\r
25                 st.Bind(0,(*queryvars.find("UUID")).second);\r
26                 st.Step();\r
27 \r
28                 if(st.RowReturned())\r
29                 {\r
30                         std::string mime;\r
31                         std::string b64data;\r
32                         std::vector<unsigned char> data;\r
33 \r
34                         st.ResultText(0,mime);\r
35                         st.ResultText(1,b64data);\r
36                         Base64::Decode(b64data,data);\r
37 \r
38                         // mime type should be short and have a / in it - otherwise skip\r
39                         if(mime.size()<50 && mime.find("/")!=std::string::npos)\r
40                         {\r
41                                 response.setContentType(mime);\r
42                                 response.setContentLength(data.size());\r
43                                 content+=std::string(data.begin(),data.end());\r
44                         }\r
45                 }\r
46         }\r
47 \r
48         std::ostream &ostr = response.send();\r
49         ostr << content;\r
50 }\r
51 \r
52 const bool ShowCaptchaPage::WillHandleURI(const std::string &uri)\r
53 {\r
54         if(uri.find("showcaptcha.")!=std::string::npos)\r
55         {\r
56                 return true;\r
57         }\r
58         else\r
59         {\r
60                 return false;\r
61         }\r
62 }\r