X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fhttp%2Fipagehandler.cpp;h=1ec7947dbba72488785cdd4085377b8082dd56a1;hb=59a5414ec47a2932a7802fcd1d98c4d80166564f;hp=3565aabb20707637d88160a6e6f604b764996f25;hpb=ee580d19b7920904587e18d72a3465d52eab6204;p=fms.git diff --git a/src/http/ipagehandler.cpp b/src/http/ipagehandler.cpp index 3565aab..1ec7947 100644 --- a/src/http/ipagehandler.cpp +++ b/src/http/ipagehandler.cpp @@ -1,6 +1,15 @@ #include "../../include/http/ipagehandler.h" -#include "../../include/http/httpdefs.h" #include "../../include/stringfunctions.h" +#include "../../include/http/multipartparser.h" + +#include +#include +#include +#include +#include +#include + +#include #ifdef XMEM #include @@ -31,241 +40,181 @@ void IPageHandler::CreateArgArray(const std::map &vars, } } -const bool IPageHandler::Handle(shttpd_arg *arg) +const std::string IPageHandler::CreateFormPassword() { - const char *uri=shttpd_get_env(arg,"REQUEST_URI"); - const char *method=shttpd_get_env(arg,"REQUEST_METHOD"); - std::string methodstr=""; - if(method) + Poco::DateTime date; + Poco::UUIDGenerator uuidgen; + Poco::UUID uuid; + try { - methodstr=method; + uuid=uuidgen.createRandom(); } - - if(uri && WillHandleURI(std::string(uri))) + catch(...) { - httpstate *mystate=(httpstate *)arg->state; + } - // first check if there was a connection error - if so delete the input/output and state buffers and return immediately - if((arg->flags & SHTTPD_CONNECTION_ERROR)==SHTTPD_CONNECTION_ERROR) - { - if(mystate && mystate->m_indata) - { - delete mystate->m_indata; - mystate->m_indata=NULL; - } - if(mystate && mystate->m_outdata) - { - delete mystate->m_outdata; - mystate->m_outdata=NULL; - } - if(mystate) - { - delete mystate; - mystate=NULL; - } - return true; - } + SQLite3DB::Statement st=m_db->Prepare("INSERT INTO tmpFormPassword(Date,Password) VALUES(?,?);"); + st.Bind(0,Poco::DateTimeFormatter::format(date,"%Y-%m-%d %H:%M:%S")); + st.Bind(1,uuid.toString()); + st.Step(); - // this is a new request - create a new arg object - if(arg->state==NULL) - { - arg->state=new httpstate; - memset(arg->state,0,sizeof(httpstate)); - mystate=(httpstate *)arg->state; + return ""; - // if post then create input buffer - if(methodstr=="POST") - { - const char *lenstr=shttpd_get_header(arg,"Content-Length"); - if(lenstr) - { - long len; - StringFunctions::Convert(std::string(lenstr),len); - mystate->m_indata=new char[len+1]; - mystate->m_indata[len]='\0'; - mystate->m_indatalen=len; - mystate->m_indatapos=0; - } - } - } +} - // we have more POST data to get - if(arg->in.len>0) - { - int pos=0; - while(posin.len) - { - mystate->m_indata[mystate->m_indatapos++]=arg->in.buf[pos++]; - } - arg->in.num_bytes=arg->in.len; - } +const std::string IPageHandler::CreateTrueFalseDropDown(const std::string &name, const std::string &selected) +{ + std::string rval=""; - // we have all POST data (or it was 0 to begin with) - generate the page - if(mystate->m_indatalen==mystate->m_indatapos && mystate->m_outdata==NULL) - { - //parse POST data and any QUERY_STRING before generating page - std::map args; - std::vector argparts; - std::string contenttype=""; - - if(shttpd_get_header(arg,"Content-Type")) - { - contenttype=shttpd_get_header(arg,"Content-Type"); - } - - if(contenttype.find("multipart/form-data")!=std::string::npos) - { - HandleMultiPartData(contenttype,mystate->m_indata,mystate->m_indatalen,args); - } - else - { - // split apart non-multipart POST - if(mystate->m_indata) - { - StringFunctions::Split(mystate->m_indata,"&",argparts); - } - // split apart query string - if(shttpd_get_env(arg,"QUERY_STRING")) - { - StringFunctions::Split(shttpd_get_env(arg,"QUERY_STRING"),"&",argparts); - } + rval+="