package handlers import ( "log/slog" auth2 "platform/web/auth" proxy2 "platform/web/domains/proxy" g "platform/web/globals" m "platform/web/models" q "platform/web/queries" "github.com/gofiber/fiber/v2" "gorm.io/gorm/clause" ) // region OnlineProxy type OnlineProxyReq struct { Name string `json:"name" validate:"required"` Version int `json:"version" validate:"required"` } func OnlineProxy(c *fiber.Ctx) (err error) { // 检查接口权限 _, err = auth2.NewProtect(c).Payload( auth2.PayloadInternalServer, ).Do() if err != nil { return err } // 验证请求参数 var req = new(OnlineProxyReq) err = g.Validator.Validate(c, req) if err != nil { return err } // 创建代理 ip := c.Context().RemoteIP() slog.Debug("注册转发服务", "ip", ip) err = q.Proxy. Clauses(clause.OnConflict{ UpdateAll: true, Columns: []clause.Column{ {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, }) if err != nil { return err } return nil } // endregion // region OfflineProxy type OfflineProxyReq struct { Name string `json:"name" validate:"required"` } func OfflineProxy(c *fiber.Ctx) (err error) { // 检查接口权限 _, err = auth2.NewProtect(c).Payload( auth2.PayloadInternalServer, ).Do() if err != nil { return err } // 验证请求参数 var req = new(OfflineProxyReq) err = g.Validator.Validate(c, req) if err != nil { return err } // 下线转发服务 _, err = q.Proxy. Where(q.Proxy.Name.Eq(req.Name)). UpdateSimple(q.Proxy.Status.Value(0)) if err != nil { return err } return nil } // endregion