You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
228 lines
8.6 KiB
228 lines
8.6 KiB
package com.example.action;
|
|
|
|
import com.example.frame.base.BaseResponse;
|
|
import com.example.frame.base.Error;
|
|
import com.example.frame.base.ErrorType;
|
|
import com.example.frame.base.Token;
|
|
import com.example.frame.utils.*;
|
|
import com.example.module.admin.ent.NginxCtrl;
|
|
import com.example.module.admin.ent.Service;
|
|
import com.example.module.admin.mgr.MappingManager;
|
|
import com.example.module.admin.req.MappingCreateRequest;
|
|
import com.example.module.admin.req.MappingDeleteRequest;
|
|
import com.example.module.admin.req.MappingFindRequest;
|
|
import com.example.module.admin.req.MappingUpdateRequest;
|
|
import com.example.module.admin.rsp.MappingFindResponse;
|
|
import com.example.module.admin.rsp.PortLoadResponse;
|
|
import freemarker.cache.ClassTemplateLoader;
|
|
import freemarker.cache.MultiTemplateLoader;
|
|
import freemarker.cache.TemplateLoader;
|
|
import freemarker.template.Configuration;
|
|
import freemarker.template.Template;
|
|
import freemarker.template.TemplateException;
|
|
import freemarker.template.TemplateExceptionHandler;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Controller;
|
|
import org.springframework.util.ClassUtils;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
import org.springframework.web.bind.annotation.RequestParam;
|
|
import org.springframework.web.bind.annotation.ResponseBody;
|
|
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
|
|
import xyz.wbsite.wsqlite.ObjectClient;
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
import java.io.*;
|
|
import java.sql.SQLException;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
|
|
@Controller
|
|
public class AjaxController {
|
|
|
|
@Autowired
|
|
private MappingManager mappingManager;
|
|
@Autowired
|
|
private NginxCtrl nginxCtrl;
|
|
@Autowired
|
|
private ObjectClient objectClient;
|
|
@Autowired
|
|
private FreeMarkerConfigurer freeMarkerConfigurer;
|
|
|
|
@RequestMapping("/ajax")
|
|
@ResponseBody
|
|
public BaseResponse ajax(@RequestParam("method") String method, HttpServletRequest request, HttpServletResponse response) {
|
|
|
|
BaseResponse baseResponse = new BaseResponse();
|
|
String jsonString = null;
|
|
try {
|
|
if (method == null) {
|
|
baseResponse.addError(new Error(ErrorType.BUSINESS_ERROR, "请求方法不能为空!"));
|
|
return baseResponse;
|
|
}
|
|
Token token = LocalData.getToken();
|
|
if (token == null) {
|
|
token = LocalData.getTempToken();
|
|
}
|
|
if (!token.hasResource(method)) {
|
|
baseResponse.addError(new Error(ErrorType.BUSINESS_ERROR, "无权调用该接口!"));
|
|
return baseResponse;
|
|
}
|
|
|
|
InputStreamReader isr = new InputStreamReader(request.getInputStream(), "UTF-8");
|
|
BufferedReader in = new BufferedReader(isr);
|
|
jsonString = in.readLine();
|
|
|
|
switch (method) {
|
|
// 示例
|
|
case "ajax.example.example":
|
|
break;
|
|
case "nginx.start":
|
|
baseResponse = nginxStart(jsonString, token);
|
|
break;
|
|
case "nginx.stop":
|
|
baseResponse = nginxStop(jsonString, token);
|
|
break;
|
|
case "nginx.reload":
|
|
baseResponse = nginxReload(jsonString, token);
|
|
break;
|
|
// 创建映射
|
|
case "ajax.admin.mapping.create":
|
|
baseResponse = createMapping(jsonString, token);
|
|
break;
|
|
// 删除映射
|
|
case "ajax.admin.mapping.delete":
|
|
baseResponse = deleteMapping(jsonString, token);
|
|
break;
|
|
// 修改映射
|
|
case "ajax.admin.mapping.update":
|
|
baseResponse = updateMapping(jsonString, token);
|
|
break;
|
|
// 查询映射
|
|
case "ajax.admin.mapping.find":
|
|
baseResponse = findMapping(jsonString, token);
|
|
break;
|
|
case "ajax.admin.port.load":
|
|
baseResponse = loadPort(jsonString, token);
|
|
break;
|
|
default:
|
|
baseResponse.addError(ErrorType.INVALID_PARAMETER, Message.NOT_EXIST_METHOD);
|
|
break;
|
|
}
|
|
|
|
} catch (Exception ex) {
|
|
baseResponse.addError(ErrorType.SYSTEM_ERROR, Message.ERROR_500);
|
|
LogUtil.dumpException(ex);
|
|
} finally {
|
|
if (baseResponse.hasError()) {
|
|
LogUtil.e("请求方法" + method + ", 请求参数:" + jsonString);
|
|
LogUtil.e("返回结果包含异常" + MapperUtil.toJson(baseResponse));
|
|
}
|
|
}
|
|
return baseResponse;
|
|
}
|
|
|
|
private BaseResponse nginxStart(String jsonString, Token token) {
|
|
BaseResponse baseResponse = new BaseResponse();
|
|
if (nginxCtrl.isRunning()) {
|
|
baseResponse.addError(ErrorType.BUSINESS_ERROR, "程序已经运行");
|
|
return baseResponse;
|
|
}
|
|
ProcessUtil.execBat(nginxCtrl.getStartCmd());
|
|
return baseResponse;
|
|
}
|
|
|
|
private BaseResponse nginxStop(String jsonString, Token token) {
|
|
BaseResponse baseResponse = new BaseResponse();
|
|
if (!nginxCtrl.isRunning()) {
|
|
baseResponse.addError(ErrorType.BUSINESS_ERROR, "程序尚未运行");
|
|
return baseResponse;
|
|
}
|
|
ProcessUtil.execBat(nginxCtrl.getStopCmd());
|
|
return baseResponse;
|
|
}
|
|
|
|
private BaseResponse nginxReload(String jsonString, Token token) {
|
|
BaseResponse baseResponse = new BaseResponse();
|
|
if (!nginxCtrl.isRunning()) {
|
|
baseResponse.addError(ErrorType.BUSINESS_ERROR, "程序尚未运行");
|
|
return baseResponse;
|
|
}
|
|
ProcessUtil.execBat(nginxCtrl.getReloadCmd());
|
|
return baseResponse;
|
|
}
|
|
|
|
/**
|
|
* 创建映射
|
|
*/
|
|
private BaseResponse createMapping(String jsonString, Token token) {
|
|
MappingCreateRequest request = MapperUtil.toJava(jsonString, MappingCreateRequest.class);
|
|
return mappingManager.create(request, token);
|
|
}
|
|
|
|
/**
|
|
* 删除映射
|
|
*/
|
|
private BaseResponse deleteMapping(String jsonString, Token token) {
|
|
MappingDeleteRequest request = MapperUtil.toJava(jsonString, MappingDeleteRequest.class);
|
|
return mappingManager.delete(request, token);
|
|
}
|
|
|
|
/**
|
|
* 修改映射
|
|
*/
|
|
private BaseResponse updateMapping(String jsonString, Token token) {
|
|
MappingUpdateRequest request = MapperUtil.toJava(jsonString, MappingUpdateRequest.class);
|
|
return mappingManager.update(request, token);
|
|
}
|
|
|
|
/**
|
|
* 查询映射
|
|
*/
|
|
private BaseResponse findMapping(String jsonString, Token token) {
|
|
MappingFindRequest request = MapperUtil.toJava(jsonString, MappingFindRequest.class);
|
|
return mappingManager.find(request, token);
|
|
}
|
|
|
|
private BaseResponse loadPort(String jsonString, Token token) {
|
|
PortLoadResponse response = new PortLoadResponse();
|
|
try {
|
|
List<Service> select = objectClient.select(Service.class, 1, 0);
|
|
|
|
for (Service service : select) {
|
|
MappingFindRequest mappingFindRequest = new MappingFindRequest();
|
|
mappingFindRequest.setPortId(service.getId());
|
|
mappingFindRequest.setPageSize(0);
|
|
MappingFindResponse mappingFindResponse = mappingManager.find(mappingFindRequest, token);
|
|
if (mappingFindResponse.hasError()) {
|
|
response.addErrors(mappingFindResponse.getErrors());
|
|
return response;
|
|
}
|
|
service.setMappingList(mappingFindResponse.getResult());
|
|
}
|
|
response.setResult(select);
|
|
} catch (SQLException | ClassNotFoundException e) {
|
|
e.printStackTrace();
|
|
response.addError(ErrorType.BUSINESS_ERROR, "配置加载错误");
|
|
return response;
|
|
}
|
|
return response;
|
|
}
|
|
|
|
private void flushConfig() {
|
|
try {
|
|
HashMap<String, Object> context = new HashMap<>();
|
|
Template template = freeMarkerConfigurer.getConfiguration().getTemplate("nginx.conf");
|
|
Writer wr = new OutputStreamWriter(new FileOutputStream(outfile), "UTF-8");
|
|
//写入
|
|
template.process(context, wr);
|
|
//关闭流
|
|
wr.close();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
} catch (TemplateException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|