commit d2f158c6148eb3067afdc5399b8c39eb9464b2ef Author: kiritow <1362050620@qq.com> Date: Thu Nov 16 22:23:25 2017 +0800 Initial Commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c56f2a4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +bin/ +obj/ +*.dll +*.exe +*.cbp +*.depend +*.layout diff --git a/installer.cpp b/installer.cpp new file mode 100644 index 0000000..d496a4d --- /dev/null +++ b/installer.cpp @@ -0,0 +1,157 @@ +/** 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; +}