Initial Commit
This commit is contained in:
commit
d2f158c614
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
bin/
|
||||||
|
obj/
|
||||||
|
*.dll
|
||||||
|
*.exe
|
||||||
|
*.cbp
|
||||||
|
*.depend
|
||||||
|
*.layout
|
157
installer.cpp
Normal file
157
installer.cpp
Normal file
|
@ -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 <cstdio>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <cstring>
|
||||||
|
#include <string>
|
||||||
|
#include <sstream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
#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<string>& 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<sz;i++)
|
||||||
|
{
|
||||||
|
ret=conn.exec(sql[i],nullptr);
|
||||||
|
if(ret<0)
|
||||||
|
{
|
||||||
|
errcode=conn.getErrCode();
|
||||||
|
errmsg=conn.getError();
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static vector<string> splitMultiSQL(const string& multisql)
|
||||||
|
{
|
||||||
|
vector<string> vec;
|
||||||
|
int len=multisql.size();
|
||||||
|
string sql;
|
||||||
|
for(int i=0;i<len;i++)
|
||||||
|
{
|
||||||
|
if(multisql[i]==';')
|
||||||
|
{
|
||||||
|
vec.push_back(sql);
|
||||||
|
sql.clear();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sql.push_back(multisql[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!sql.empty())
|
||||||
|
{
|
||||||
|
vec.push_back(sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
return vec;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
void _do_make_str(ostringstream& ostr,T&& x)
|
||||||
|
{
|
||||||
|
ostr<<x;
|
||||||
|
}
|
||||||
|
|
||||||
|
void _do_make_str(ostringstream& ostr)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T,typename... Args>
|
||||||
|
void _do_make_str(ostringstream& ostr,T&& x,Args&&... args)
|
||||||
|
{
|
||||||
|
ostr<<x;
|
||||||
|
_do_make_str(ostr,args...);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename... Args>
|
||||||
|
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<string> 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;
|
||||||
|
}
|
Reference in New Issue
Block a user