version 0.3.29
[fms.git] / include / http / ipagehandler.h
1 #ifndef _ipagehandler_\r
2 #define _ipagehandler_\r
3 \r
4 #include "../ilogger.h"\r
5 #include "../idatabase.h"\r
6 \r
7 #include <Poco/Net/HTTPRequestHandler.h>\r
8 #include <Poco/Net/HTTPServerRequest.h>\r
9 #include <Poco/Net/HTTPServerResponse.h>\r
10 \r
11 #include <cstdlib>\r
12 #include <string>\r
13 #include <map>\r
14 #include <vector>\r
15 \r
16 class IPageHandler:public Poco::Net::HTTPRequestHandler,public ILogger,public IDatabase\r
17 {\r
18 public:\r
19         IPageHandler(SQLite3DB::DB *db):IDatabase(db)           {}\r
20         IPageHandler(SQLite3DB::DB *db, const std::string &templatestr, const std::string &pagename):IDatabase(db),m_template(templatestr),m_pagename(pagename) {  }\r
21         virtual ~IPageHandler() {}\r
22         virtual const bool WillHandleURI(const std::string &uri);\r
23 \r
24         virtual IPageHandler *New()=0;  // returns a new instance of the object\r
25 \r
26         virtual void handleRequest(Poco::Net::HTTPServerRequest &request, Poco::Net::HTTPServerResponse &response);\r
27 \r
28 private:\r
29         virtual const std::string GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)=0;\r
30 \r
31 protected:\r
32         // converts from basename[#] query args into a vector where the vector pos is the index pos #\r
33         void CreateArgArray(const std::map<std::string,std::string> &vars, const std::string &basename, std::vector<std::string> &args);\r
34         const std::string CreateTrueFalseDropDown(const std::string &name, const std::string &selected);\r
35 \r
36         void CreateQueryVarMap(Poco::Net::HTTPServerRequest &request, std::map<std::string,std::string> &vars);\r
37 \r
38         const std::string CreateFormPassword();\r
39         const bool ValidateFormPassword(const std::map<std::string,std::string> &vars);\r
40 \r
41         // replaces html elements with encoded characters (i.e. < becomes &lt;)\r
42         const std::string SanitizeOutput(const std::string &input);\r
43         // don't replace space with &nbsp;, because browser might convert to unicode non breaking space character\r
44         const std::string SanitizeTextAreaOutput(const std::string &input);\r
45 \r
46         std::string m_template;\r
47         std::string m_pagename;\r
48 \r
49 };\r
50 \r
51 #endif  // _ipagehandler_\r