/** bm-do-install.cgi * Work with bm-install.html --Ajax/Post--> bm-do-install.cgi --Json--> bm-install.html --> Jump to... * * Book Manager Quick Installer */ #include #include #include #include #include #include #include #include #include "Request.h" #include "Response.h" #include "Util.h" #include "MySQLWrapper.h" #include "json.hpp" using namespace std; using json=nlohmann::json; int doInstall(const string& dbaddr,const string& dbuser,const string& dbpass,const string& dbname,int dbport,const vector& sql, int& errcode,string& errmsg) { MySQLConn conn; int ret=conn.connect(dbaddr.c_str(),dbuser.c_str(),dbpass.c_str(),dbname.c_str(),dbport); if(ret==-1) { errcode=conn.getErrCode(); errmsg=conn.getError(); return -1; } conn.exec("set names utf8",nullptr); int sz=sql.size(); for(int i=0;i splitMultiSQL(const string& multisql) { vector vec; int len=multisql.size(); string sql; for(int i=0;i void _do_make_str(ostringstream& ostr,T&& x) { ostr< void _do_make_str(ostringstream& ostr,T&& x,Args&&... args) { ostr< string make_str(Args&&... args) { ostringstream ostr; _do_make_str(ostr,args...); return ostr.str(); } int main() { Request req; Response res; res.contentType="text/json;charset=utf-8"; json j; if(req.requestMethod=="GET") { j["success"]=0; j["errcode"]=1; j["errmsg"]=make_str("GET Method Not Supported."); } else if(req.requestMethod=="POST") { if(!req.post["dbaddr"].empty() && !req.post["dbport"].empty() && !req.post["dbuser"].empty() && !req.post["dbpass"].empty() && !req.post["dbname"].empty() && !req.post["tbprefix"].empty() && !req.post["supass"].empty()) { string s=getFileContent("setup.sql"); replaceFlag(s,"{prefix}",req.post["tbprefix"]); vector vec=splitMultiSQL(s); vec.push_back(make_str("insert into ",req.post["tbprefix"],"_user values ('root','",req.post["supass"],"','SuperUser',0,3) ")); int ecode; string emsg; int ret=doInstall(req.post["dbaddr"],req.post["dbuser"],req.post["dbpass"],req.post["dbname"],ParseInt(req.post["dbport"]),vec, ecode,emsg); if(ret<0) { /// Error. j["success"]=0; j["errcode"]=ecode; j["errmsg"]=make_str("SQL Error: ",emsg); } else { j["success"]=1; } } else { j["success"]=0; j["errcode"]=2; j["errmsg"]=make_str("Failed to parse parameters. Please retry."); } } res.content.append(j.dump()); res.show(); return 0; }