55 lines
1.0 KiB
Go
55 lines
1.0 KiB
Go
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
|
|
}
|