1 #include "../../include/http/ipagehandler.h"
\r
2 #include "../../include/stringfunctions.h"
\r
3 #include "../../include/http/multipartparser.h"
\r
5 #include <Poco/Net/HTMLForm.h>
\r
13 void IPageHandler::CreateArgArray(const std::map<std::string,std::string> &vars, const std::string &basename, std::vector<std::string> &args)
\r
15 for(std::map<std::string,std::string>::const_iterator i=vars.begin(); i!=vars.end(); i++)
\r
17 if((*i).first.find(basename)==0 && (*i).first.find("[")!=std::string::npos && (*i).first.find("]")!=std::string::npos)
\r
20 std::string indexstr;
\r
21 std::string::size_type startpos;
\r
22 std::string::size_type endpos;
\r
23 startpos=(*i).first.find("[");
\r
24 endpos=(*i).first.find("]");
\r
26 indexstr=(*i).first.substr(startpos+1,(endpos-startpos)-1);
\r
27 StringFunctions::Convert(indexstr,index);
\r
29 while(args.size()<index+1)
\r
33 args[index]=(*i).second;
\r
38 const std::string IPageHandler::CreateTrueFalseDropDown(const std::string &name, const std::string &selected)
\r
40 std::string rval="";
\r
42 rval+="<select name=\""+name+"\">";
\r
43 rval+="<option value=\"true\"";
\r
44 if(selected=="true")
\r
48 rval+=">true</option>";
\r
49 rval+="<option value=\"false\"";
\r
50 if(selected=="false")
\r
54 rval+=">false</option>";
\r
60 void IPageHandler::CreateQueryVarMap(Poco::Net::HTTPServerRequest &request, std::map<std::string,std::string> &vars)
\r
62 for(Poco::Net::HTTPServerRequest::ConstIterator i=request.begin(); i!=request.end(); i++)
\r
64 vars[(*i).first]=(*i).second;
\r
67 // handle HTMLForm and multiparts
\r
68 MultiPartParser mpp;
\r
69 Poco::Net::HTMLForm form(request,request.stream(),mpp);
\r
70 for(Poco::Net::HTMLForm::ConstIterator i=form.begin(); i!=form.end(); i++)
\r
72 vars[(*i).first]=(*i).second;
\r
75 // get any multiparts
\r
76 std::map<std::string,std::string> mpvars=mpp.GetVars();
\r
77 for(std::map<std::string,std::string>::iterator i=mpvars.begin(); i!=mpvars.end(); i++)
\r
79 vars[(*i).first]=(*i).second;
\r
84 void IPageHandler::handleRequest(Poco::Net::HTTPServerRequest &request, Poco::Net::HTTPServerResponse &response)
\r
86 m_log->trace("IPageHandler::handleRequest from "+request.clientAddress().toString());
\r
88 std::map<std::string,std::string> vars;
\r
90 CreateQueryVarMap(request,vars);
\r
92 response.setChunkedTransferEncoding(true);
\r
93 response.setContentType("text/html");
\r
95 std::ostream &ostr = response.send();
\r
96 ostr << GeneratePage(request.getMethod(),vars);
\r
100 const std::string IPageHandler::SanitizeOutput(const std::string &input)
\r
102 // must do & first because all other elements have & in them!
\r
103 std::string output=StringFunctions::Replace(input,"&","&");
\r
104 output=StringFunctions::Replace(output,"<","<");
\r
105 output=StringFunctions::Replace(output,">",">");
\r
106 output=StringFunctions::Replace(output,"\"",""");
\r
107 output=StringFunctions::Replace(output," "," ");
\r