99 lines
1.7 KiB
Go
99 lines
1.7 KiB
Go
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
|