MagicFunctionController.java 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package org.ssssssss.magicapi.controller;
  2. import org.apache.commons.lang3.StringUtils;
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.ResponseBody;
  7. import org.ssssssss.magicapi.config.MagicConfiguration;
  8. import org.ssssssss.magicapi.interceptor.RequestInterceptor;
  9. import org.ssssssss.magicapi.model.FunctionInfo;
  10. import org.ssssssss.magicapi.model.JsonBean;
  11. import org.ssssssss.magicapi.provider.FunctionServiceProvider;
  12. import javax.servlet.http.HttpServletRequest;
  13. import java.util.List;
  14. public class MagicFunctionController extends MagicController {
  15. private FunctionServiceProvider functionService;
  16. private static final Logger logger = LoggerFactory.getLogger(MagicFunctionController.class);
  17. public MagicFunctionController(MagicConfiguration configuration) {
  18. super(configuration);
  19. this.functionService = configuration.getFunctionServiceProvider();
  20. }
  21. @RequestMapping("/function/list")
  22. @ResponseBody
  23. public JsonBean<List<FunctionInfo>> list() {
  24. try {
  25. return new JsonBean<>(functionService.list());
  26. } catch (Exception e) {
  27. logger.error("查询函数列表失败", e);
  28. return new JsonBean<>(-1, e.getMessage());
  29. }
  30. }
  31. @RequestMapping("/function/get")
  32. @ResponseBody
  33. public JsonBean<FunctionInfo> get(String id, HttpServletRequest request) {
  34. if (!allowVisit(request, RequestInterceptor.Authorization.DETAIL)) {
  35. return new JsonBean<>(-10, "无权限执行查看详情方法");
  36. }
  37. try {
  38. return new JsonBean<>(functionService.get(id));
  39. } catch (Exception e) {
  40. logger.error("查询函数出错", e);
  41. return new JsonBean<>(-1, e.getMessage());
  42. }
  43. }
  44. @RequestMapping("/function/move")
  45. @ResponseBody
  46. public JsonBean<Boolean> move(String id, String groupId, HttpServletRequest request) {
  47. if(configuration.getWorkspace().readonly()){
  48. return new JsonBean<>(0, "当前为只读模式,无法移动");
  49. }
  50. if (!allowVisit(request, RequestInterceptor.Authorization.SAVE)) {
  51. return new JsonBean<>(-10, "无权限执行移动函数");
  52. }
  53. try {
  54. if (!functionService.allowMove(id, groupId)) {
  55. return new JsonBean<>(0, "移动后名称会重复,请修改名称后在试。");
  56. }
  57. if (!configuration.getMagicFunctionManager().move(id, groupId)) {
  58. return new JsonBean<>(0, "该路径已被映射,请换一个路径");
  59. } else {
  60. return new JsonBean<>(functionService.move(id, groupId));
  61. }
  62. } catch (Exception e) {
  63. logger.error("移动函数出错", e);
  64. return new JsonBean<>(-1, e.getMessage());
  65. }
  66. }
  67. @RequestMapping("/function/save")
  68. @ResponseBody
  69. public JsonBean<String> save(FunctionInfo functionInfo, HttpServletRequest request) {
  70. if(configuration.getWorkspace().readonly()){
  71. return new JsonBean<>(0, "当前为只读模式,无法保存");
  72. }
  73. if (!allowVisit(request, RequestInterceptor.Authorization.SAVE)) {
  74. return new JsonBean<>(-10, "无权限执行保存方法");
  75. }
  76. if (StringUtils.isBlank(functionInfo.getName())) {
  77. return new JsonBean<>(0, "函数名称不能为空");
  78. }
  79. if (StringUtils.isBlank(functionInfo.getPath())) {
  80. return new JsonBean<>(0, "函数路径不能为空");
  81. }
  82. if (StringUtils.isBlank(functionInfo.getScript())) {
  83. return new JsonBean<>(0, "脚本内容不能为空");
  84. }
  85. if (configuration.getMagicFunctionManager().hasRegister(functionInfo)) {
  86. return new JsonBean<>(0, "该路径已被映射,请换一个路径");
  87. }
  88. try {
  89. if (StringUtils.isBlank(functionInfo.getId())) {
  90. if (functionService.exists(functionInfo.getPath(), functionInfo.getGroupId())) {
  91. return new JsonBean<>(0, String.format("函数%s已存在", functionInfo.getPath()));
  92. }
  93. if(!functionService.insert(functionInfo)){
  94. return new JsonBean<>(0, "保存失败,请检查函数名称是否重复且不能包含特殊字符。");
  95. }
  96. } else {
  97. if (functionService.existsWithoutId(functionInfo.getPath(), functionInfo.getGroupId(), functionInfo.getId())) {
  98. return new JsonBean<>(0, String.format("函数%s已存在", functionInfo.getPath()));
  99. }
  100. if(!functionService.update(functionInfo)){
  101. return new JsonBean<>(0, "保存失败,请检查函数名称是否重复且不能包含特殊字符。");
  102. }
  103. }
  104. configuration.getMagicFunctionManager().register(functionInfo);
  105. return new JsonBean<>(functionInfo.getId());
  106. } catch (Exception e) {
  107. logger.error("保存函数出错", e);
  108. return new JsonBean<>(-1, e.getMessage());
  109. }
  110. }
  111. @RequestMapping("/function/delete")
  112. @ResponseBody
  113. public JsonBean<Boolean> delete(String id, HttpServletRequest request) {
  114. if(configuration.getWorkspace().readonly()){
  115. return new JsonBean<>(0, "当前为只读模式,无法删除");
  116. }
  117. if (!allowVisit(request, RequestInterceptor.Authorization.DELETE)) {
  118. return new JsonBean<>(-10, "无权限执行删除方法");
  119. }
  120. try {
  121. boolean success = functionService.delete(id);
  122. if (success) {
  123. configuration.getMagicFunctionManager().unregister(id);
  124. }
  125. return new JsonBean<>(success);
  126. } catch (Exception e) {
  127. logger.error("删除函数出错", e);
  128. return new JsonBean<>(-1, e.getMessage());
  129. }
  130. }
  131. }