添加代理与节点的注册与端口分配接口功能

This commit is contained in:
2025-05-13 09:29:13 +08:00
parent 957d9ef443
commit 60df1548f0
17 changed files with 692 additions and 464 deletions

View File

@@ -160,7 +160,7 @@ func CreateChannel(c *fiber.Ctx) error {
req.Protocol,
req.AuthType,
req.Count,
s.NodeFilterConfig{
s.EdgeFilterConfig{
Isp: isp,
Prov: req.Prov,
City: req.City,

63
web/handlers/edge.go Normal file
View File

@@ -0,0 +1,63 @@
package handlers
import (
"github.com/gofiber/fiber/v2"
"gorm.io/gen/field"
proxy2 "platform/web/domains/proxy"
g "platform/web/globals"
m "platform/web/models"
q "platform/web/queries"
)
type RegisterEdgeReq struct {
Name int `json:"name" validate:"required"`
Version int `json:"version" validate:"required"`
ISP int `json:"isp" validate:"required"`
Prov string `json:"prov" validate:"required"`
City string `json:"city" validate:"required"`
}
type RegisterEdgeResp struct {
Host string `json:"host"`
}
func OnlineEdge(c *fiber.Ctx) (err error) {
// 验证请求参数
var req = new(RegisterEdgeReq)
err = g.Validator.Validate(c, req)
if err != nil {
return err
}
// 挑选合适的转发服务
var fwd *m.Proxy
fwd, err = q.Proxy.Debug().
Select(q.Proxy.ALL, q.Edge.ALL.Count().As("count")).
LeftJoin(q.Edge, q.Edge.ProxyID.EqCol(q.Proxy.ID)).
Where(q.Proxy.Type.Eq(int32(proxy2.TypeSelfHosted))).
Group(q.Proxy.ID).
Order(field.NewField("", "count").Desc()).
First()
if err != nil {
return err
}
// 保存节点信息
err = q.Edge.Save(&m.Edge{
Version: int32(req.Version),
Host: c.IP(),
Isp: int32(req.ISP),
Prov: req.Prov,
City: req.City,
ProxyID: fwd.ID,
})
if err != nil {
return err
}
// 返回服务地址
return c.JSON(RegisterEdgeResp{
Host: fwd.Host,
})
}

54
web/handlers/proxy.go Normal file
View File

@@ -0,0 +1,54 @@
package handlers
import (
"github.com/gofiber/fiber/v2"
"gorm.io/gorm/clause"
auth2 "platform/web/auth"
proxy2 "platform/web/domains/proxy"
g "platform/web/globals"
m "platform/web/models"
q "platform/web/queries"
)
type RegisterProxyReq 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(RegisterProxyReq)
err = g.Validator.Validate(c, req)
if err != nil {
return err
}
// 创建代理
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: c.IP(),
Type: int32(proxy2.TypeSelfHosted),
})
if err != nil {
return err
}
return nil
}