From 0d9aeb1d987e61e33eabc1b61a5774e5cd704c97 Mon Sep 17 00:00:00 2001 From: HFO4 <912394456@qq.com> Date: Sun, 31 Oct 2021 09:38:50 +0800 Subject: [PATCH] Fix: delete node in admin panel --- pkg/cluster/master.go | 4 +++- routers/controllers/admin.go | 11 +++++++++++ routers/router.go | 2 ++ service/admin/node.go | 26 ++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/pkg/cluster/master.go b/pkg/cluster/master.go index 1f2f140..e877920 100644 --- a/pkg/cluster/master.go +++ b/pkg/cluster/master.go @@ -10,6 +10,7 @@ import ( "github.com/cloudreve/Cloudreve/v3/pkg/mq" "github.com/cloudreve/Cloudreve/v3/pkg/serializer" "github.com/cloudreve/Cloudreve/v3/pkg/util" + "github.com/gofrs/uuid" "net/url" "os" "path/filepath" @@ -182,10 +183,11 @@ func (r *rpcService) Init() error { func (r *rpcService) CreateTask(task *model.Download, groupOptions map[string]interface{}) (string, error) { r.parent.lock.RLock() // 生成存储路径 + guid, _ := uuid.NewV4() path := filepath.Join( r.parent.Model.Aria2OptionsSerialized.TempPath, "aria2", - strconv.FormatInt(time.Now().UnixNano(), 10), + guid.String(), ) r.parent.lock.RUnlock() diff --git a/routers/controllers/admin.go b/routers/controllers/admin.go index e0d411b..097a441 100644 --- a/routers/controllers/admin.go +++ b/routers/controllers/admin.go @@ -465,3 +465,14 @@ func AdminToggleNode(c *gin.Context) { c.JSON(200, ErrorResponse(err)) } } + +// AdminDeleteGroup 删除用户组 +func AdminDeleteNode(c *gin.Context) { + var service admin.NodeService + if err := c.ShouldBindUri(&service); err == nil { + res := service.Delete() + c.JSON(200, res) + } else { + c.JSON(200, ErrorResponse(err)) + } +} diff --git a/routers/router.go b/routers/router.go index 230b009..9888358 100644 --- a/routers/router.go +++ b/routers/router.go @@ -456,6 +456,8 @@ func InitMasterRouter() *gin.Engine { node.POST("", controllers.AdminAddNode) // 启用/暂停节点 node.PATCH("enable/:id/:desired", controllers.AdminToggleNode) + // 删除节点 + node.DELETE(":id", controllers.AdminDeleteNode) } } diff --git a/service/admin/node.go b/service/admin/node.go index 1561c98..98f9b58 100644 --- a/service/admin/node.go +++ b/service/admin/node.go @@ -95,3 +95,29 @@ func (service *ToggleNodeService) Toggle() serializer.Response { return serializer.Response{} } + +// NodeService 节点ID服务 +type NodeService struct { + ID uint `uri:"id" json:"id" binding:"required"` +} + +// Delete 删除节点 +func (service *NodeService) Delete() serializer.Response { + // 查找用户组 + node, err := model.GetNodeByID(service.ID) + if err != nil { + return serializer.Err(serializer.CodeNotFound, "节点不存在", err) + } + + // 是否为系统节点 + if node.ID <= 1 { + return serializer.Err(serializer.CodeNoPermissionErr, "系统节点无法删除", err) + } + + cluster.Default.Delete(node.ID) + if err := model.DB.Delete(&node).Error; err != nil { + return serializer.DBErr("无法删除节点", err) + } + + return serializer.Response{} +}