version 0.3.0
[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         response.setChunkedTransferEncoding(true);\r
17 \r
18         std::string content="";\r
19         if(queryvars.find("UUID")!=queryvars.end())\r
20         {\r
21                 SQLite3DB::Statement st=m_db->Prepare("SELECT MimeType,PuzzleData FROM tblIntroductionPuzzleRequests WHERE Type='captcha' AND UUID=?;");\r
22                 st.Bind(0,(*queryvars.find("UUID")).second);\r
23                 st.Step();\r
24 \r
25                 if(st.RowReturned())\r
26                 {\r
27                         std::string mime;\r
28                         std::string b64data;\r
29                         std::vector<unsigned char> data;\r
30 \r
31                         st.ResultText(0,mime);\r
32                         st.ResultText(1,b64data);\r
33                         Base64::Decode(b64data,data);\r
34 \r
35                         // mime type should be short and have a / in it - otherwise skip\r
36                         if(mime.size()<50 && mime.find("/")!=std::string::npos)\r
37                         {\r
38                                 response.setContentType(mime);\r
39                                 response.setContentLength(data.size());\r
40                                 content+=std::string(data.begin(),data.end());\r
41                         }\r
42                 }\r
43         }\r
44 \r
45         std::ostream &ostr = response.send();\r
46         ostr << content;\r
47 }\r
48 \r
49 const bool ShowCaptchaPage::WillHandleURI(const std::string &uri)\r
50 {\r
51         if(uri.find("showcaptcha.")!=std::string::npos)\r
52         {\r
53                 return true;\r
54         }\r
55         else\r
56         {\r
57                 return false;\r
58         }\r
59 }\r