version 0.1.10
[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 const std::string ShowCaptchaPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)\r
10 {\r
11         std::string content="HTTP/1.1 200 OK\r\n";\r
12         if(queryvars.find("UUID")!=queryvars.end())\r
13         {\r
14                 SQLite3DB::Statement st=m_db->Prepare("SELECT MimeType,PuzzleData FROM tblIntroductionPuzzleRequests WHERE Type='captcha' AND UUID=?;");\r
15                 st.Bind(0,(*queryvars.find("UUID")).second);\r
16                 st.Step();\r
17 \r
18                 if(st.RowReturned())\r
19                 {\r
20                         std::string mime;\r
21                         std::string b64data;\r
22                         std::vector<unsigned char> data;\r
23                         std::string lenstr;\r
24 \r
25                         st.ResultText(0,mime);\r
26                         st.ResultText(1,b64data);\r
27                         Base64::Decode(b64data,data);\r
28                         StringFunctions::Convert(data.size(),lenstr);\r
29 \r
30                         // mime type should be short and have a / in it - otherwise skip\r
31                         if(mime.size()<50 && mime.find("/")!=std::string::npos)\r
32                         {\r
33                                 content+="Content-Type: "+mime+"\r\n";\r
34                                 content+="Content-Length: "+lenstr+"\r\n\r\n";\r
35                                 content+=std::string(data.begin(),data.end());\r
36                         }\r
37                 }\r
38         }\r
39         return content;\r
40 }\r
41 \r
42 const bool ShowCaptchaPage::WillHandleURI(const std::string &uri)\r
43 {\r
44         if(uri.find("showcaptcha.")!=std::string::npos)\r
45         {\r
46                 return true;\r
47         }\r
48         else\r
49         {\r
50                 return false;\r
51         }\r
52 }\r