3x-ui/web/controller/client_center.go

128 lines
3.2 KiB
Go
Raw Normal View History

package controller
import (
"strconv"
"github.com/gin-gonic/gin"
"github.com/mhsanaei/3x-ui/v2/web/service"
"github.com/mhsanaei/3x-ui/v2/web/session"
)
// ClientCenterController manages centralized client profiles and inbound assignments.
type ClientCenterController struct {
service service.ClientCenterService
}
func NewClientCenterController(g *gin.RouterGroup) *ClientCenterController {
a := &ClientCenterController{}
a.initRouter(g)
return a
}
func (a *ClientCenterController) initRouter(g *gin.RouterGroup) {
g.GET("/list", a.list)
g.GET("/inbounds", a.inbounds)
g.POST("/add", a.add)
g.POST("/update/:id", a.update)
g.POST("/del/:id", a.del)
}
type clientCenterUpsertForm struct {
Name string `form:"name"`
EmailPrefix string `form:"emailPrefix"`
TotalGB int64 `form:"totalGB"`
ExpiryTime int64 `form:"expiryTime"`
LimitIP int `form:"limitIp"`
Enable bool `form:"enable"`
Comment string `form:"comment"`
InboundIds []int `form:"inboundIds"`
}
func (a *ClientCenterController) list(c *gin.Context) {
user := session.GetLoginUser(c)
items, err := a.service.ListMasterClients(user.Id)
if err != nil {
jsonMsg(c, "get client center list", err)
return
}
jsonObj(c, items, nil)
}
func (a *ClientCenterController) inbounds(c *gin.Context) {
user := session.GetLoginUser(c)
items, err := a.service.ListInbounds(user.Id)
if err != nil {
jsonMsg(c, "get inbounds", err)
return
}
jsonObj(c, items, nil)
}
func (a *ClientCenterController) add(c *gin.Context) {
form := &clientCenterUpsertForm{}
if err := c.ShouldBind(form); err != nil {
jsonMsg(c, "invalid client payload", err)
return
}
user := session.GetLoginUser(c)
item, err := a.service.CreateMasterClient(user.Id, service.UpsertMasterClientInput{
Name: form.Name,
EmailPrefix: form.EmailPrefix,
TotalGB: form.TotalGB,
ExpiryTime: form.ExpiryTime,
LimitIP: form.LimitIP,
Enable: form.Enable,
Comment: form.Comment,
InboundIds: form.InboundIds,
})
if err != nil {
jsonMsg(c, "create master client", err)
return
}
jsonMsgObj(c, "master client created", item, nil)
}
func (a *ClientCenterController) update(c *gin.Context) {
id, err := strconv.Atoi(c.Param("id"))
if err != nil {
jsonMsg(c, "invalid client id", err)
return
}
form := &clientCenterUpsertForm{}
if err := c.ShouldBind(form); err != nil {
jsonMsg(c, "invalid client payload", err)
return
}
user := session.GetLoginUser(c)
item, err := a.service.UpdateMasterClient(user.Id, id, service.UpsertMasterClientInput{
Name: form.Name,
EmailPrefix: form.EmailPrefix,
TotalGB: form.TotalGB,
ExpiryTime: form.ExpiryTime,
LimitIP: form.LimitIP,
Enable: form.Enable,
Comment: form.Comment,
InboundIds: form.InboundIds,
})
if err != nil {
jsonMsg(c, "update master client", err)
return
}
jsonMsgObj(c, "master client updated", item, nil)
}
func (a *ClientCenterController) del(c *gin.Context) {
id, err := strconv.Atoi(c.Param("id"))
if err != nil {
jsonMsg(c, "invalid client id", err)
return
}
user := session.GetLoginUser(c)
err = a.service.DeleteMasterClient(user.Id, id)
if err != nil {
jsonMsg(c, "delete master client", err)
return
}
jsonMsg(c, "master client deleted", nil)
}