From 661616dfc3d91f42c714ba020dade9873c8f9053 Mon Sep 17 00:00:00 2001 From: luorijun Date: Wed, 14 May 2025 17:45:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E8=BE=B9=E7=BC=98=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E4=B8=8B=E7=BA=BF=E5=92=8C=E7=94=B1=E8=BD=AC=E5=8F=91?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E7=BB=B4=E6=8A=A4=E7=9A=84=E7=AB=AF=E5=8F=A3?= =?UTF-8?q?=E5=88=86=E9=85=8D=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/handlers/edge.go | 36 ++++++++++++++++++++---- web/handlers/proxy.go | 65 +++++++++++++++++++++++++++++++++++++------ web/router.go | 2 ++ 3 files changed, 89 insertions(+), 14 deletions(-) diff --git a/web/handlers/edge.go b/web/handlers/edge.go index f156d03..4cc711a 100644 --- a/web/handlers/edge.go +++ b/web/handlers/edge.go @@ -21,6 +21,7 @@ type RegisterEdgeReq struct { } type RegisterEdgeResp struct { + Id int32 `json:"id"` Host string `json:"host"` } @@ -47,10 +48,7 @@ func OnlineEdge(c *fiber.Ctx) (err error) { } // 保存节点信息 - err = q.Edge.Clauses(clause.OnConflict{ - UpdateAll: true, - Columns: []clause.Column{{Name: "name"}}, - }).Create(&m.Edge{ + var edge = &m.Edge{ Name: req.Name, Version: int32(req.Version), Host: c.Context().RemoteIP().String(), @@ -60,13 +58,41 @@ func OnlineEdge(c *fiber.Ctx) (err error) { ProxyID: fwd.ID, Type: int32(edge2.TypeSelfHosted), Status: 1, - }) + } + err = q.Edge.Clauses(clause.OnConflict{ + UpdateAll: true, + Columns: []clause.Column{{Name: "name"}}, + }).Create(edge) if err != nil { return err } // 返回服务地址 return c.JSON(RegisterEdgeResp{ + Id: edge.ID, Host: fwd.Host, }) } + +type OfflineEdgeReq struct { + Name string `json:"name" validate:"required"` +} + +func OfflineEdge(c *fiber.Ctx) (err error) { + // 验证请求参数 + var req = new(OfflineEdgeReq) + err = g.Validator.Validate(c, req) + if err != nil { + return err + } + + // 下线转发服务 + _, err = q.Edge. + Where(q.Edge.Name.Eq(req.Name)). + UpdateSimple(q.Edge.Status.Value(0)) + if err != nil { + return err + } + + return c.SendStatus(fiber.StatusOK) +} diff --git a/web/handlers/proxy.go b/web/handlers/proxy.go index 2b7a2c0..49423ce 100644 --- a/web/handlers/proxy.go +++ b/web/handlers/proxy.go @@ -19,6 +19,10 @@ type OnlineProxyReq struct { Version int `json:"version" validate:"required"` } +type OnlineProxyResp struct { + Id int32 `json:"id"` +} + func OnlineProxy(c *fiber.Ctx) (err error) { // 检查接口权限 @@ -38,7 +42,13 @@ func OnlineProxy(c *fiber.Ctx) (err error) { // 创建代理 ip := c.Context().RemoteIP() - slog.Debug("注册转发服务", "ip", ip) + var proxy = &m.Proxy{ + Name: req.Name, + Version: int32(req.Version), + Host: ip.String(), + Type: int32(proxy2.TypeSelfHosted), + Status: 1, + } err = q.Proxy. Clauses(clause.OnConflict{ UpdateAll: true, @@ -46,18 +56,15 @@ func OnlineProxy(c *fiber.Ctx) (err error) { {Name: q.Proxy.Name.ColumnName().String()}, }, }). - Create(&m.Proxy{ - Name: req.Name, - Version: int32(req.Version), - Host: ip.String(), - Type: int32(proxy2.TypeSelfHosted), - Status: 1, - }) + Create(proxy) if err != nil { return err } - return nil + slog.Debug("注册转发服务", "ip", ip, "id", proxy.ID) + return c.JSON(&OnlineProxyResp{ + Id: proxy.ID, + }) } // endregion @@ -96,3 +103,43 @@ func OfflineProxy(c *fiber.Ctx) (err error) { } // endregion + +// region AssignProxyFwdPort + +type AssignProxyFwdPortReq struct { + Proxy int32 `json:"proxy" validate:"required"` + Edge int32 `json:"edge" validate:"required"` + Port uint16 `json:"port" validate:"required"` +} + +func AssignProxyFwdPort(c *fiber.Ctx) (err error) { + // 检查接口权限 + _, err = auth2.NewProtect(c).Payload( + auth2.PayloadInternalServer, + ).Do() + if err != nil { + return err + } + + // 验证请求参数 + var req = new(AssignProxyFwdPortReq) + err = g.Validator.Validate(c, req) + if err != nil { + return err + } + + // 更新边缘节点端口分配状态 + _, err = q.Edge. + Where(q.Edge.ID.Eq(req.Edge)). + UpdateSimple( + q.Edge.ProxyID.Value(req.Proxy), + q.Edge.ProxyPort.Value(int32(req.Port)), + ) + if err != nil { + return err + } + + return nil +} + +// endregion diff --git a/web/router.go b/web/router.go index 050d34a..4f22d44 100644 --- a/web/router.go +++ b/web/router.go @@ -67,10 +67,12 @@ func ApplyRouters(app *fiber.App) { proxy := api.Group("/proxy") proxy.Post("/online", handlers.OnlineProxy) proxy.Post("/offline", handlers.OfflineProxy) + proxy.Post("/assign", handlers.AssignProxyFwdPort) // 节点 edge := api.Group("/edge") edge.Post("/online", handlers.OnlineEdge) + edge.Post("/offline", handlers.OfflineEdge) // 临时 app.Get("/test", func(c *fiber.Ctx) error {