mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-02-28 05:02:59 +00:00
127 lines
3.2 KiB
Go
127 lines
3.2 KiB
Go
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)
|
|
}
|