diff options
| author | MHSanaei <mc.sanaei@gmail.com> | 2023-02-09 22:18:06 +0300 |
|---|---|---|
| committer | MHSanaei <mc.sanaei@gmail.com> | 2023-02-09 22:18:06 +0300 |
| commit | b73e4173a3c1e69e02ad6b4e3b43e425e57a5be9 (patch) | |
| tree | d95d2f5e903d97082e11eb9f9023c165b1bde388 /web/controller/inbound.go | |
3x-ui
Diffstat (limited to 'web/controller/inbound.go')
| -rw-r--r-- | web/controller/inbound.go | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/web/controller/inbound.go b/web/controller/inbound.go new file mode 100644 index 00000000..7be877e3 --- /dev/null +++ b/web/controller/inbound.go @@ -0,0 +1,136 @@ +package controller + +import ( + "fmt" + "github.com/gin-gonic/gin" + "strconv" + "x-ui/database/model" + "x-ui/logger" + "x-ui/web/global" + "x-ui/web/service" + "x-ui/web/session" +) + +type InboundController struct { + inboundService service.InboundService + xrayService service.XrayService +} + +func NewInboundController(g *gin.RouterGroup) *InboundController { + a := &InboundController{} + a.initRouter(g) + a.startTask() + return a +} + +func (a *InboundController) initRouter(g *gin.RouterGroup) { + g = g.Group("/inbound") + + g.POST("/list", a.getInbounds) + g.POST("/add", a.addInbound) + g.POST("/del/:id", a.delInbound) + g.POST("/update/:id", a.updateInbound) + + g.POST("/resetClientTraffic/:email", a.resetClientTraffic) + + +} + +func (a *InboundController) startTask() { + webServer := global.GetWebServer() + c := webServer.GetCron() + c.AddFunc("@every 10s", func() { + if a.xrayService.IsNeedRestartAndSetFalse() { + err := a.xrayService.RestartXray(false) + if err != nil { + logger.Error("restart xray failed:", err) + } + } + }) +} + +func (a *InboundController) getInbounds(c *gin.Context) { + user := session.GetLoginUser(c) + inbounds, err := a.inboundService.GetInbounds(user.Id) + if err != nil { + jsonMsg(c, I18n(c , "pages.inbounds.toasts.obtain"), err) + return + } + jsonObj(c, inbounds, nil) +} +func (a *InboundController) getInbound(c *gin.Context) { + id, err := strconv.Atoi(c.Param("id")) + if err != nil { + jsonMsg(c, I18n(c , "get"), err) + return + } + inbound, err := a.inboundService.GetInbound(id) + if err != nil { + jsonMsg(c, I18n(c , "pages.inbounds.toasts.obtain"), err) + return + } + jsonObj(c, inbound, nil) +} + +func (a *InboundController) addInbound(c *gin.Context) { + inbound := &model.Inbound{} + err := c.ShouldBind(inbound) + if err != nil { + jsonMsg(c, I18n(c , "pages.inbounds.addTo"), err) + return + } + user := session.GetLoginUser(c) + inbound.UserId = user.Id + inbound.Enable = true + inbound.Tag = fmt.Sprintf("inbound-%v", inbound.Port) + inbound, err = a.inboundService.AddInbound(inbound) + jsonMsgObj(c, I18n(c , "pages.inbounds.addTo"), inbound, err) + if err == nil { + a.xrayService.SetToNeedRestart() + } +} + +func (a *InboundController) delInbound(c *gin.Context) { + id, err := strconv.Atoi(c.Param("id")) + if err != nil { + jsonMsg(c, I18n(c , "delete"), err) + return + } + err = a.inboundService.DelInbound(id) + jsonMsgObj(c, I18n(c , "delete"), id, err) + if err == nil { + a.xrayService.SetToNeedRestart() + } +} + +func (a *InboundController) updateInbound(c *gin.Context) { + id, err := strconv.Atoi(c.Param("id")) + if err != nil { + jsonMsg(c, I18n(c , "pages.inbounds.revise"), err) + return + } + inbound := &model.Inbound{ + Id: id, + } + err = c.ShouldBind(inbound) + if err != nil { + jsonMsg(c, I18n(c , "pages.inbounds.revise"), err) + return + } + inbound, err = a.inboundService.UpdateInbound(inbound) + jsonMsgObj(c, I18n(c , "pages.inbounds.revise"), inbound, err) + if err == nil { + a.xrayService.SetToNeedRestart() + } +} + +func (a *InboundController) resetClientTraffic(c *gin.Context) { + email := c.Param("email") + + err := a.inboundService.ResetClientTraffic(email) + if err != nil { + jsonMsg(c, "something worng!", err) + return + } + jsonMsg(c, "traffic reseted", nil) +} |
