Преглед на файлове

精简 mgr/admin 模块的 SysPageController

reghao преди 6 месеца
родител
ревизия
e9e6a7363a
променени са 19 файла, в които са добавени 172 реда и са изтрити 500 реда
  1. 0 166
      mgr/src/main/java/cn/reghao/devops/mgr/admin/controller/SysMessageController.java
  2. 0 60
      mgr/src/main/java/cn/reghao/devops/mgr/admin/controller/page/EmailPageController.java
  3. 0 54
      mgr/src/main/java/cn/reghao/devops/mgr/admin/controller/page/ReceiverPageController.java
  4. 0 31
      mgr/src/main/java/cn/reghao/devops/mgr/admin/controller/page/SysLogPageController.java
  5. 0 58
      mgr/src/main/java/cn/reghao/devops/mgr/admin/controller/page/SysMessagePageController.java
  6. 142 0
      mgr/src/main/java/cn/reghao/devops/mgr/admin/controller/page/SysPageController.java
  7. 0 11
      mgr/src/main/java/cn/reghao/devops/mgr/admin/db/repository/EmailAccountRepository.java
  8. 0 28
      mgr/src/main/java/cn/reghao/devops/mgr/admin/model/po/EmailAccount.java
  9. 1 3
      mgr/src/main/java/cn/reghao/devops/mgr/admin/model/po/NotifyReceiver.java
  10. 5 8
      mgr/src/main/java/cn/reghao/devops/mgr/admin/service/NotifyService.java
  11. 8 0
      mgr/src/main/java/cn/reghao/devops/mgr/admin/service/SysMessageService.java
  12. 4 22
      mgr/src/main/java/cn/reghao/devops/mgr/admin/service/notifier/email/EmailNotify.java
  13. 1 1
      mgr/src/main/resources/templates/admin/msg/sysmsg.html
  14. 1 1
      mgr/src/main/resources/templates/admin/notify/email.html
  15. 1 1
      mgr/src/main/resources/templates/admin/notify/emailadd.html
  16. 5 9
      mgr/src/main/resources/templates/admin/notify/receiver.html
  17. 3 12
      mgr/src/main/resources/templates/admin/notify/receiveradd.html
  18. 1 1
      mgr/src/main/resources/templates/admin/notify/receiveredit.html
  19. 0 34
      mgr/src/test/java/cn/reghao/devops/mgr/admin/MessageTest.java

+ 0 - 166
mgr/src/main/java/cn/reghao/devops/mgr/admin/controller/SysMessageController.java

@@ -1,166 +0,0 @@
-package cn.reghao.devops.mgr.admin.controller;
-
-import cn.reghao.devops.mgr.admin.db.repository.EmailAccountRepository;
-import cn.reghao.devops.mgr.admin.db.repository.NotifyReceiverRepository;
-import cn.reghao.devops.mgr.admin.model.po.EmailAccount;
-import cn.reghao.devops.mgr.admin.model.po.NotifyReceiver;
-import cn.reghao.devops.mgr.admin.model.vo.NotifyType;
-import cn.reghao.devops.mgr.admin.service.SysMessageService;
-import cn.reghao.jutil.jdk.result.WebResult;
-import cn.reghao.jutil.jdk.string.StringRegexp;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.http.MediaType;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2024-07-30 10:03:22
- */
-@Api(tags = "系统消息接口")
-@RestController
-@RequestMapping("/api/sys")
-public class SysMessageController {
-    private final SysMessageService sysMessageService;
-    private final EmailAccountRepository emailAccountRepository;
-    private final NotifyReceiverRepository notifyReceiverRepository;
-
-    public SysMessageController(SysMessageService sysMessageService, EmailAccountRepository emailAccountRepository,
-                                NotifyReceiverRepository notifyReceiverRepository) {
-        this.sysMessageService = sysMessageService;
-        this.emailAccountRepository = emailAccountRepository;
-        this.notifyReceiverRepository = notifyReceiverRepository;
-    }
-
-    @ApiOperation(value = "清空系统消息", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @PostMapping(value = "/message/clear", produces = MediaType.APPLICATION_JSON_VALUE)
-    @ResponseBody
-    public String clearMessage() {
-        sysMessageService.clearUnread();
-        return WebResult.success();
-    }
-
-    @ApiOperation(value = "添加邮箱帐号", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @PostMapping(value = "/notify/email/save", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String saveReceiver(@Validated EmailAccount emailAccount) {
-        String email = emailAccount.getUsername();
-        boolean matched = StringRegexp.matchEmail(email);
-        if (!matched) {
-            return WebResult.failWithMsg("邮箱地址格式不正确, 请检查");
-        }
-
-        List<EmailAccount> list = emailAccountRepository.findAll();
-        if (!list.isEmpty()) {
-            EmailAccount emailAccount1 = list.get(0);
-            emailAccount1.setSmtp(emailAccount.getSmtp());
-            emailAccount1.setUsername(emailAccount.getUsername());
-            emailAccount1.setPassword(emailAccount.getPassword());
-            emailAccount1.setPersonal(emailAccount.getPersonal());
-            emailAccountRepository.save(emailAccount1);
-        } else {
-            emailAccountRepository.save(emailAccount);
-        }
-
-        return WebResult.success();
-    }
-
-    @ApiOperation(value = "删除邮箱帐号", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @DeleteMapping(value = "/notify/email/delete/{username}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String deleteEmail(@PathVariable("username") String username) {
-        /*NotifyReceiver notifyReceiver = notifyReceiverRepository.findByType(NotifyType.email.name());
-        if (notifyReceiver != null) {
-            return WebResult.failWithMsg("系统中存在接收通知的邮箱地址, 不能删除发送通知的邮箱");
-        }
-
-        List<EmailAccount> list = emailAccountRepository.findAll();
-        emailAccountRepository.delete(list.get(0));*/
-        return WebResult.failWithMsg("接口未实现");
-    }
-
-    @ApiOperation(value = "添加通知接收", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @PostMapping(value = "/notify/receiver/save", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String saveReceiver(@Validated NotifyReceiver notifyReceiver) {
-        String name = notifyReceiver.getName();
-        NotifyReceiver notifyReceiver1 = notifyReceiverRepository.findByName(name);
-        if (notifyReceiver1 != null) {
-            String errMsg = String.format("NotifyReceiver %s exist", name);
-            return WebResult.failWithMsg(errMsg);
-        }
-
-        /*String type = notifyReceiver.getType();
-        NotifyReceiver notifyReceiver1 = notifyReceiverRepository.findByType(type);
-        if (notifyReceiver1 != null) {
-            String errMsg = String.format("NotifyType %s already exist", type);
-            return WebResult.failWithMsg(errMsg);
-        }*/
-        String type = notifyReceiver.getType();
-        if (type.equals(NotifyType.email.name())) {
-            List<EmailAccount> list = emailAccountRepository.findAll();
-            if (list.isEmpty()) {
-                return WebResult.failWithMsg("没有可以发送通知的邮箱, 请先配置");
-            }
-
-            String email = notifyReceiver.getUrl();
-            boolean matched = StringRegexp.matchEmail(email);
-            if (!matched) {
-                return WebResult.failWithMsg("邮箱地址格式不正确, 请检查");
-            }
-        }
-
-        notifyReceiverRepository.save(notifyReceiver);
-        return WebResult.success();
-    }
-
-    @ApiOperation(value = "更新通知接收", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @PostMapping(value = "/notify/receiver/edit", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String editReceiver(@Validated NotifyReceiver notifyReceiver) {
-        String name = notifyReceiver.getName();
-        NotifyReceiver notifyReceiver1 = notifyReceiverRepository.findByName(name);
-        if (notifyReceiver1 == null) {
-            String errMsg = String.format("NotifyReceiver %s not exist", name);
-            return WebResult.failWithMsg(errMsg);
-        }
-
-        notifyReceiver1.setUrl(notifyReceiver.getUrl());
-        notifyReceiverRepository.save(notifyReceiver1);
-        return WebResult.success();
-    }
-
-    @ApiOperation(value = "更新通知接收", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @PostMapping(value = "/notify/receiver/default/{name}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String updateDefaultReceiver(@PathVariable("name") String name) {
-        NotifyReceiver notifyReceiver1 = notifyReceiverRepository.findByName(name);
-        if (notifyReceiver1 == null || notifyReceiver1.getSetdefault()) {
-            String errMsg = String.format("NotifyReceiver %s not exist or it is default receiver", name);
-            return WebResult.failWithMsg(errMsg);
-        }
-
-        NotifyReceiver notifyReceiver2 = notifyReceiverRepository.findByTypeAndSetdefaultIsTrue(notifyReceiver1.getType());
-        notifyReceiver1.setSetdefault(true);
-        notifyReceiver2.setSetdefault(false);
-        notifyReceiverRepository.saveAll(List.of(notifyReceiver1, notifyReceiver2));
-        return WebResult.success();
-    }
-
-    @ApiOperation(value = "删除通知接收", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @DeleteMapping(value = "/notify/receiver/delete/{name}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String deleteReceiver(@PathVariable("name") String name) {
-        NotifyReceiver notifyReceiver = notifyReceiverRepository.findByName(name);
-        if (notifyReceiver != null) {
-            notifyReceiverRepository.delete(notifyReceiver);
-        }
-
-        return WebResult.success();
-    }
-}

+ 0 - 60
mgr/src/main/java/cn/reghao/devops/mgr/admin/controller/page/EmailPageController.java

@@ -1,60 +0,0 @@
-package cn.reghao.devops.mgr.admin.controller.page;
-
-import cn.reghao.devops.mgr.admin.db.repository.EmailAccountRepository;
-import cn.reghao.devops.mgr.admin.model.po.EmailAccount;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2024-01-26 20:52:54
- */
-@Api(tags = "邮件帐号管理页面")
-@Controller
-@RequestMapping("/sys/notify/email")
-public class EmailPageController {
-    private final EmailAccountRepository emailAccountRepository;
-
-    public EmailPageController(EmailAccountRepository emailAccountRepository) {
-        this.emailAccountRepository = emailAccountRepository;
-    }
-
-    @ApiOperation(value = "邮箱帐号列表页面", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @GetMapping("")
-    public String emailIndex(Model model) {
-        PageRequest pageRequest = PageRequest.of(0, 100);
-        Page<EmailAccount> page = emailAccountRepository.findAll(pageRequest);
-        page.getContent().forEach(emailAccount -> {
-            emailAccount.setPassword("******");
-        });
-
-        model.addAttribute("page", page);
-        model.addAttribute("list", page.getContent());
-        return "/admin/notify/email";
-    }
-
-    @ApiOperation(value = "添加邮箱帐号页面", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @GetMapping("/add")
-    public String emailAdd(Model model) {
-        return "/admin/notify/emailadd";
-    }
-
-    @ApiOperation(value = "更新邮箱帐号页面", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @GetMapping("/edit/{username}")
-    public String emailEdit(@PathVariable("username") String username, Model model) throws Exception {
-        List<EmailAccount> list = emailAccountRepository.findAll();
-        model.addAttribute("emailAccount", list.get(0));
-        return "/admin/notify/emailadd";
-    }
-}

+ 0 - 54
mgr/src/main/java/cn/reghao/devops/mgr/admin/controller/page/ReceiverPageController.java

@@ -1,54 +0,0 @@
-package cn.reghao.devops.mgr.admin.controller.page;
-
-import cn.reghao.devops.mgr.admin.db.repository.NotifyReceiverRepository;
-import cn.reghao.devops.mgr.admin.model.po.NotifyReceiver;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * @author reghao
- * @date 2024-01-26 20:32:24
- */
-@Api(tags = "通知接收页面")
-@Controller
-@RequestMapping("/sys/notify/receiver")
-public class ReceiverPageController {
-    private final NotifyReceiverRepository notifyReceiverRepository;
-
-    public ReceiverPageController(NotifyReceiverRepository notifyReceiverRepository) {
-        this.notifyReceiverRepository = notifyReceiverRepository;
-    }
-
-    @ApiOperation(value = "通知接收列表页面", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @GetMapping("")
-    public String receiverIndex(Model model) throws Exception {
-        PageRequest pageRequest = PageRequest.of(0, 100);
-        Page<NotifyReceiver> page = notifyReceiverRepository.findAll(pageRequest);
-        model.addAttribute("page", page);
-        model.addAttribute("list", page.getContent());
-        return "/admin/notify/receiver";
-    }
-
-    @ApiOperation(value = "添加通知接收页面", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @GetMapping("/add")
-    public String receiverAdd(Model model) throws Exception {
-        return "/admin/notify/receiveradd";
-    }
-
-    @ApiOperation(value = "更新通知接收页面", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @GetMapping("/edit/{name}")
-    public String receiverEdit(@PathVariable("name") String name, Model model) throws Exception {
-        NotifyReceiver notifyReceiver = notifyReceiverRepository.findByName(name);
-        model.addAttribute("notifyReceiver", notifyReceiver);
-        return "/admin/notify/receiveredit";
-    }
-}

+ 0 - 31
mgr/src/main/java/cn/reghao/devops/mgr/admin/controller/page/SysLogPageController.java

@@ -1,31 +0,0 @@
-package cn.reghao.devops.mgr.admin.controller.page;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-/**
- * @author reghao
- * @date 2021-04-04 21:24:18
- */
-@Api(tags = "系统日志页面")
-@Controller
-@RequestMapping("/sys/log")
-public class SysLogPageController {
-    @ApiOperation(value = "系统运行日志页面", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @GetMapping("/rt")
-    public String runtimeLogPage() {
-        return "/admin/log/rtlog";
-    }
-
-    @ApiOperation(value = "系统访问日志页面", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @GetMapping("/access")
-    public String accessLogPage() {
-        return "/admin/log/accesslog";
-    }
-}

+ 0 - 58
mgr/src/main/java/cn/reghao/devops/mgr/admin/controller/page/SysMessagePageController.java

@@ -1,58 +0,0 @@
-package cn.reghao.devops.mgr.admin.controller.page;
-
-import cn.reghao.devops.mgr.admin.model.po.SysMessage;
-import cn.reghao.devops.mgr.admin.db.repository.SysMessageRepository;
-import cn.reghao.devops.mgr.admin.model.vo.SysMsg;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Sort;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-/**
- * @author reghao
- * @date 2021-04-04 21:24:18
- */
-@Api(tags = "系统消息页面")
-@Controller
-@RequestMapping("/sys/message")
-public class SysMessagePageController {
-    private final SysMessageRepository sysMessageRepository;
-
-    public SysMessagePageController(SysMessageRepository sysMessageRepository) {
-        this.sysMessageRepository = sysMessageRepository;
-    }
-
-    @ApiOperation(value = "系统消息页面", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @GetMapping("")
-    public String messagePage(Model model) {
-        PageRequest pageRequest = PageRequest.of(0, 10, Sort.by(Sort.Direction.DESC, "createTime"));
-        Page<SysMsg> page = sysMessageRepository.findByUnreadIsTrue(pageRequest).map(SysMsg::new);
-        model.addAttribute("list", page.getContent());
-        return "/admin/msg/sysmsg";
-    }
-
-    @ApiOperation(value = "系统消息内容", notes = "N")
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @GetMapping("/detail/{id}")
-    public String messageDetail(@PathVariable("id") int id, Model model) {
-        SysMessage sysMessage = sysMessageRepository.findById(id).orElse(null);
-        String content = "";
-        if (sysMessage != null) {
-            content = sysMessage.getContent();
-
-            sysMessage.setUnread(false);
-            sysMessageRepository.save(sysMessage);
-        }
-
-        model.addAttribute("content", content);
-        return "/admin/msg/sysmsgdetail";
-    }
-}

+ 142 - 0
mgr/src/main/java/cn/reghao/devops/mgr/admin/controller/page/SysPageController.java

@@ -0,0 +1,142 @@
+package cn.reghao.devops.mgr.admin.controller.page;
+
+import cn.reghao.devops.mgr.admin.db.repository.NotifyReceiverRepository;
+import cn.reghao.devops.mgr.admin.db.repository.SysMessageRepository;
+import cn.reghao.devops.mgr.admin.model.po.NotifyReceiver;
+import cn.reghao.devops.mgr.admin.model.po.SysMessage;
+import cn.reghao.devops.mgr.admin.model.vo.SysMsg;
+import cn.reghao.devops.mgr.admin.service.SysMessageService;
+import cn.reghao.jutil.web.WebResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.http.MediaType;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2021-04-04 21:24:18
+ */
+@Api(tags = "系统页面和接口")
+@Controller
+@RequestMapping("/sys")
+public class SysPageController {
+    private final NotifyReceiverRepository notifyReceiverRepository;
+    private final SysMessageService sysMessageService;
+
+    public SysPageController(NotifyReceiverRepository notifyReceiverRepository, SysMessageService sysMessageService) {
+        this.notifyReceiverRepository = notifyReceiverRepository;
+        this.sysMessageService = sysMessageService;
+    }
+
+    @ApiOperation(value = "系统运行日志页面", notes = "N")
+    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    @GetMapping("/log")
+    public String runtimeLogPage() {
+        return "/admin/log/rtlog";
+    }
+
+    @ApiOperation(value = "系统消息页面", notes = "N")
+    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    @GetMapping("/message")
+    public String messagePage(Model model) {
+        Page<SysMsg> page = sysMessageService.getSysMessages();
+        model.addAttribute("list", page.getContent());
+        return "/admin/msg/sysmsg";
+    }
+
+    @ApiOperation(value = "系统消息内容", notes = "N")
+    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    @GetMapping("/message/detail/{id}")
+    public String messageDetail(@PathVariable("id") int id, Model model) {
+        String content = "";
+        SysMessage sysMessage = sysMessageService.getSysMessage(id);
+        if (sysMessage != null) {
+            content = sysMessage.getContent();
+        }
+
+        model.addAttribute("content", content);
+        return "/admin/msg/sysmsgdetail";
+    }
+
+    @ApiOperation(value = "清空系统消息", notes = "N")
+    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    @PostMapping(value = "/message/clear", produces = MediaType.APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public String clearMessage() {
+        sysMessageService.clearUnread();
+        return WebResult.success();
+    }
+
+    @ApiOperation(value = "通知接收列表页面", notes = "N")
+    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    @GetMapping("/notify")
+    public String receiverIndex(Model model) throws Exception {
+        PageRequest pageRequest = PageRequest.of(0, 100);
+        Page<NotifyReceiver> page = notifyReceiverRepository.findAll(pageRequest);
+        model.addAttribute("page", page);
+        model.addAttribute("list", page.getContent());
+        return "/admin/notify/receiver";
+    }
+
+    @ApiOperation(value = "添加 webhook 页面", notes = "N")
+    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    @GetMapping("/notify/add")
+    public String receiverAdd() {
+        return "/admin/notify/receiveradd";
+    }
+
+    @ApiOperation(value = "添加 webhook", notes = "N")
+    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    @PostMapping(value = "/notify/save", produces = MediaType.APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public String saveReceiver(@Validated NotifyReceiver notifyReceiver) {
+        String name = notifyReceiver.getName();
+        NotifyReceiver notifyReceiver1 = notifyReceiverRepository.findByName(name);
+        if (notifyReceiver1 != null) {
+            String errMsg = String.format("NotifyReceiver %s exist", name);
+            return WebResult.failWithMsg(errMsg);
+        }
+
+        notifyReceiverRepository.save(notifyReceiver);
+        return WebResult.success();
+    }
+
+    @ApiOperation(value = "设置默认 webhook", notes = "N")
+    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    @PostMapping(value = "/notify/default/{name}", produces = MediaType.APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public String updateDefaultReceiver(@PathVariable("name") String name) {
+        NotifyReceiver notifyReceiver1 = notifyReceiverRepository.findByName(name);
+        if (notifyReceiver1 == null || notifyReceiver1.getSetdefault()) {
+            String errMsg = String.format("NotifyReceiver %s not exist or it is default receiver", name);
+            return WebResult.failWithMsg(errMsg);
+        }
+
+        NotifyReceiver notifyReceiver2 = notifyReceiverRepository.findByTypeAndSetdefaultIsTrue(notifyReceiver1.getType());
+        notifyReceiver1.setSetdefault(true);
+        notifyReceiver2.setSetdefault(false);
+        notifyReceiverRepository.saveAll(List.of(notifyReceiver1, notifyReceiver2));
+        return WebResult.success();
+    }
+
+    @ApiOperation(value = "删除 webhook", notes = "N")
+    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    @DeleteMapping(value = "/notify/delete/{name}", produces = MediaType.APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public String deleteReceiver(@PathVariable("name") String name) {
+        NotifyReceiver notifyReceiver = notifyReceiverRepository.findByName(name);
+        if (notifyReceiver != null) {
+            notifyReceiverRepository.delete(notifyReceiver);
+        }
+
+        return WebResult.success();
+    }
+}

+ 0 - 11
mgr/src/main/java/cn/reghao/devops/mgr/admin/db/repository/EmailAccountRepository.java

@@ -1,11 +0,0 @@
-package cn.reghao.devops.mgr.admin.db.repository;
-
-import cn.reghao.devops.mgr.admin.model.po.EmailAccount;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-/**
- * @author reghao
- * @date 2024-01-26 20:02:50
- */
-public interface EmailAccountRepository extends JpaRepository<EmailAccount, Integer> {
-}

+ 0 - 28
mgr/src/main/java/cn/reghao/devops/mgr/admin/model/po/EmailAccount.java

@@ -1,28 +0,0 @@
-package cn.reghao.devops.mgr.admin.model.po;
-
-import cn.reghao.devops.mgr.util.BaseEntity;
-import lombok.Getter;
-import lombok.Setter;
-
-import javax.persistence.Entity;
-import javax.persistence.Table;
-import javax.validation.constraints.NotBlank;
-
-/**
- * @author reghao
- * @date 2023-10-30 14:41:19
- */
-@Setter
-@Getter
-@Entity
-@Table(name = "sys_email_account")
-public class EmailAccount extends BaseEntity {
-    @NotBlank
-    private String smtp;
-    @NotBlank
-    private String username;
-    @NotBlank
-    private String password;
-    @NotBlank
-    private String personal;
-}

+ 1 - 3
mgr/src/main/java/cn/reghao/devops/mgr/admin/model/po/NotifyReceiver.java

@@ -2,7 +2,6 @@ package cn.reghao.devops.mgr.admin.model.po;
 
 import cn.reghao.devops.mgr.admin.model.vo.NotifyType;
 import cn.reghao.devops.mgr.util.BaseEntity;
-import cn.reghao.devops.mgr.util.validator.ValidEnum;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -22,8 +21,6 @@ import javax.validation.constraints.NotBlank;
 public class NotifyReceiver extends BaseEntity {
     @Column(nullable = false, unique = true)
     private String name;
-    @NotBlank
-    @ValidEnum(value = NotifyType.class, message = "请选择正确的通知类型")
     private String type;
     @NotBlank
     private String url;
@@ -31,6 +28,7 @@ public class NotifyReceiver extends BaseEntity {
     private Boolean setdefault;
 
     public NotifyReceiver() {
+        this.type = NotifyType.webhook.getName();
         this.setdefault = false;
     }
 }

+ 5 - 8
mgr/src/main/java/cn/reghao/devops/mgr/admin/service/NotifyService.java

@@ -25,14 +25,11 @@ import java.util.concurrent.ExecutorService;
 public class NotifyService {
     private final ExecutorService threadPool = ThreadPoolWrapper.threadPool("notify-service");
     private final DingNotify dingNotify;
-    private final EmailNotify emailNotify;
     private final NotifyReceiverRepository notifyReceiverRepository;
     private final SysMessageService sysMessageService;
 
-    public NotifyService(DingNotify dingNotify, EmailNotify emailNotify,
-                         NotifyReceiverRepository notifyReceiverRepository, SysMessageService sysMessageService) {
+    public NotifyService(DingNotify dingNotify, NotifyReceiverRepository notifyReceiverRepository, SysMessageService sysMessageService) {
         this.dingNotify = dingNotify;
-        this.emailNotify = emailNotify;
         this.notifyReceiverRepository = notifyReceiverRepository;
         this.sysMessageService = sysMessageService;
     }
@@ -47,12 +44,12 @@ public class NotifyService {
                 threadPool.execute(new NotifyTask<>(sysMessageService, dingNotify, receiver, dingMsg));
             }
         } else if (msg instanceof EmailMsg) {
-            NotifyReceiver notifyReceiver = notifyReceiverRepository.findByTypeAndSetdefaultIsTrue(NotifyType.email.getName());
+            /*NotifyReceiver notifyReceiver = notifyReceiverRepository.findByTypeAndSetdefaultIsTrue(NotifyType.email.getName());
             if (notifyReceiver != null) {
                 receiver = notifyReceiver.getUrl();
                 EmailMsg emailMsg = (EmailMsg) msg;
                 threadPool.execute(new NotifyTask<>(sysMessageService, emailNotify, receiver, emailMsg));
-            }
+            }*/
         }
     }
 
@@ -61,8 +58,8 @@ public class NotifyService {
             DingMsg dingMsg = (DingMsg) msg;
             threadPool.execute(new NotifyTask<>(sysMessageService, dingNotify, receiver, dingMsg));
         } else if (msg instanceof EmailMsg) {
-            EmailMsg emailMsg = (EmailMsg) msg;
-            threadPool.execute(new NotifyTask<>(sysMessageService, emailNotify, receiver, emailMsg));
+            /*EmailMsg emailMsg = (EmailMsg) msg;
+            threadPool.execute(new NotifyTask<>(sysMessageService, emailNotify, receiver, emailMsg));*/
         }
     }
     /**

+ 8 - 0
mgr/src/main/java/cn/reghao/devops/mgr/admin/service/SysMessageService.java

@@ -2,7 +2,10 @@ package cn.reghao.devops.mgr.admin.service;
 
 import cn.reghao.devops.mgr.admin.db.repository.SysMessageRepository;
 import cn.reghao.devops.mgr.admin.model.po.SysMessage;
+import cn.reghao.devops.mgr.admin.model.vo.SysMsg;
+import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -19,6 +22,11 @@ public class SysMessageService {
         this.sysMessageRepository = sysMessageRepository;
     }
 
+    public Page<SysMsg> getSysMessages() {
+        PageRequest pageRequest = PageRequest.of(0, 10, Sort.by(Sort.Direction.DESC, "createTime"));
+        return sysMessageRepository.findByUnreadIsTrue(pageRequest).map(SysMsg::new);
+    }
+
     public void clearUnread() {
         List<SysMessage> list = sysMessageRepository.findByUnreadIsTrue(PageRequest.of(0, 100)).getContent();
         if (!list.isEmpty()) {

+ 4 - 22
mgr/src/main/java/cn/reghao/devops/mgr/admin/service/notifier/email/EmailNotify.java

@@ -1,10 +1,7 @@
 package cn.reghao.devops.mgr.admin.service.notifier.email;
 
-import cn.reghao.devops.mgr.admin.db.repository.EmailAccountRepository;
-import cn.reghao.devops.mgr.admin.model.po.EmailAccount;
 import cn.reghao.devops.mgr.admin.service.notifier.Notify;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
 
 import javax.mail.Address;
 import javax.mail.MessagingException;
@@ -14,7 +11,6 @@ import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeMessage;
 import java.io.UnsupportedEncodingException;
 import java.util.Date;
-import java.util.List;
 import java.util.Properties;
 
 /**
@@ -24,28 +20,14 @@ import java.util.Properties;
  * @date 2021-02-25 19:23:16
  */
 @Slf4j
-@Service
 public class EmailNotify implements Notify<EmailMsg> {
-    private final EmailAccountRepository emailAccountRepository;
-
-    public EmailNotify(EmailAccountRepository emailAccountRepository) {
-        this.emailAccountRepository = emailAccountRepository;
-    }
-
     @Override
     public void send(String receiver, EmailMsg msg) throws Exception {
-        List<EmailAccount> list = emailAccountRepository.findAll();
-        if (list.isEmpty()) {
-            log.info("没有可用于发送通知的邮箱配置");
-            return;
-        }
-
-        EmailAccount emailAccount = list.get(0);
-        String myEmail = emailAccount.getUsername();
-        String password = emailAccount.getPassword();
-        String personal = emailAccount.getPersonal();
+        String myEmail = "";
+        String password = "";
+        String personal = "";
+        String smtp = "";
 
-        String smtp = emailAccount.getSmtp();
         Properties props = new Properties();
         props.setProperty("mail.transport.protocol", "smtp");
         props.setProperty("mail.smtp.host", smtp);

+ 1 - 1
mgr/src/main/resources/templates/admin/msg/sysmsg.html

@@ -14,7 +14,7 @@
                 <div class="pull-right">
                     <div class="btn-group-right">
                         <button class="layui-btn">
-                            <i class="fa fa-recycle"><a class="ajax-post" th:href="@{/api/sys/message/clear}">清空消息</a></i>
+                            <i class="fa fa-recycle"><a class="ajax-post" th:href="@{/sys/message/clear}">清空消息</a></i>
                         </button>
                     </div>
                 </div>

+ 1 - 1
mgr/src/main/resources/templates/admin/notify/email.html

@@ -40,7 +40,7 @@
                         <a class="open-popup" data-title="编辑" th:attr="data-url=@{'/sys/notify/email/edit/'+${item.username}}"
                            data-size="640,480" href="#">编辑</a>
                         <a class="ajax-delete" th:attr="data-msg='确定要删除 '+ ${item.username} + '?'"
-                           th:href="@{'/api/sys/notify/email/delete/' + ${item.username}}">删除</a>
+                           th:href="@{'/sys/notify/email/delete/' + ${item.username}}">删除</a>
                     </td>
                 </tr>
                 </tbody>

+ 1 - 1
mgr/src/main/resources/templates/admin/notify/emailadd.html

@@ -5,7 +5,7 @@
 
 <body>
 <div class="layui-form timo-compile">
-    <form th:action="@{/api/sys/notify/email/save}">
+    <form th:action="@{/sys/notify/email/save}">
         <div class="layui-form-item">
             <label class="layui-form-label required">SMTP</label>
             <div class="layui-input-inline">

+ 5 - 9
mgr/src/main/resources/templates/admin/notify/receiver.html

@@ -5,14 +5,14 @@
 <body class="timo-layout-page">
 <div class="layui-card">
     <div class="layui-card-header timo-card-header">
-        <span><i class="fa fa-bars"></i> 通知接收配置</span>
+        <span><i class="fa fa-bars"></i> webhook 配置</span>
         <i class="layui-icon layui-icon-refresh refresh-btn"></i>
     </div>
     <div class="layui-card-body">
         <div class="layui-row timo-card-screen put-row">
             <div class="pull-right screen-btn-group">
                 <div class="btn-group-right">
-                    <button class="layui-btn open-popup" data-title="添加接收者" th:attr="data-url=@{/sys/notify/receiver/add}"
+                    <button class="layui-btn open-popup" data-title="添加 webhook" th:attr="data-url=@{/sys/notify/add}"
                             data-size="640,480">
                         <i class="fa fa-plus"></i> 添加
                     </button>
@@ -23,7 +23,6 @@
             <table class="layui-table timo-table">
                 <thead>
                 <tr>
-                    <th class="sortable" data-field="notifyType">通知类型</th>
                     <th class="sortable" data-field="notifyName">通知名字</th>
                     <th class="sortable" data-field="receiver">接收地址</th>
                     <th class="sortable" data-field="setdefault">默认通知</th>
@@ -32,17 +31,14 @@
                 </thead>
                 <tbody>
                 <tr th:each="item:${list}">
-                    <td th:text="${item.type}">通知类型</td>
                     <td th:text="${item.name}">通知名字</td>
                     <td th:text="${item.url}">接收地址</td>
                     <td th:text="${item.setdefault}">默认通知</td>
                     <td>
-                        <a class="open-popup" data-title="编辑" th:attr="data-url=@{'/sys/notify/receiver/edit/'+${item.name}}"
-                           data-size="640,480" href="#">编辑</a>
-                        <a class="ajax-post" th:attr="data-msg='确定使用 '+ ${item.name} + ' 接收通知?'"
-                           th:href="@{'/api/sys/notify/receiver/default/' + ${item.name}}">设为默认</a>
+                        <a class="ajax-post" th:attr="data-msg='确定将 '+ ${item.name} + ' 设为默认?'"
+                           th:href="@{'/sys/receiver/default/' + ${item.name}}">设为默认</a>
                         <a class="ajax-delete" th:attr="data-msg='确定要删除 '+ ${item.name} + '?'"
-                           th:href="@{'/api/sys/notify/receiver/delete/' + ${item.name}}">删除</a>
+                           th:href="@{'/sys/receiver/delete/' + ${item.name}}">删除</a>
                     </td>
                 </tr>
                 </tbody>

+ 3 - 12
mgr/src/main/resources/templates/admin/notify/receiveradd.html

@@ -5,16 +5,7 @@
 
 <body>
 <div class="layui-form timo-compile">
-    <form th:action="@{/api/sys/notify/receiver/save}">
-        <div class="layui-form-item">
-            <label class="layui-form-label required">通知类型</label>
-            <div class="layui-input-inline">
-                <select name="type">
-                    <option value="webhook">webhook</option>
-                    <option value="email">email</option>
-                </select>
-            </div>
-        </div>
+    <form th:action="@{/sys/notify/save}">
         <div class="layui-form-item">
             <label class="layui-form-label required">通知名字</label>
             <div class="layui-input-inline">
@@ -22,9 +13,9 @@
             </div>
         </div>
         <div class="layui-form-item">
-            <label class="layui-form-label required">接收者地址</label>
+            <label class="layui-form-label required">webhook 地址</label>
             <div class="layui-input-inline">
-                <input class="layui-input" type="text" name="url" placeholder="请输入接收组者地址" required>
+                <input class="layui-input" type="text" name="url" placeholder="请输入 webhook 地址" required>
             </div>
         </div>
         <div class="layui-form-item timo-finally">

+ 1 - 1
mgr/src/main/resources/templates/admin/notify/receiveredit.html

@@ -5,7 +5,7 @@
 
 <body>
 <div class="layui-form timo-compile">
-    <form th:action="@{/api/sys/notify/receiver/edit}">
+    <form th:action="@{/sys/notify/receiver/edit}">
         <div class="layui-form-item">
             <label class="layui-form-label required">通知类型</label>
             <div class="layui-input-inline">

+ 0 - 34
mgr/src/test/java/cn/reghao/devops/mgr/admin/MessageTest.java

@@ -1,34 +0,0 @@
-package cn.reghao.devops.mgr.admin;
-
-import cn.reghao.devops.mgr.MgrApplication;
-import cn.reghao.devops.mgr.admin.db.repository.EmailAccountRepository;
-import cn.reghao.devops.mgr.admin.db.repository.NotifyReceiverRepository;
-import cn.reghao.devops.mgr.admin.service.NotifyService;
-import lombok.extern.slf4j.Slf4j;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.ActiveProfiles;
-import org.springframework.test.context.junit4.SpringRunner;
-
-/**
- * @author reghao
- * @date 2024-08-03 10:27:07
- */
-@Slf4j
-@ActiveProfiles("dev")
-@SpringBootTest(classes = MgrApplication.class)
-@RunWith(SpringRunner.class)
-public class MessageTest {
-    @Autowired
-    NotifyReceiverRepository notifyReceiverRepository;
-    @Autowired
-    EmailAccountRepository emailAccountRepository;
-    @Autowired
-    NotifyService notifyService;
-
-    @Test
-    public void notifyTest() throws InterruptedException {
-    }
-}