| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263 | package controllerimport (	"fmt"	"strconv"	"x-ui/database/model"	"x-ui/logger"	"x-ui/web/global"	"x-ui/web/service"	"x-ui/web/session"	"github.com/gin-gonic/gin")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("/clientIps/:email", a.getClientIps)	g.POST("/clearClientIps/:email", a.clearClientIps)	g.POST("/addClient", a.addInboundClient)	g.POST("/:id/delClient/:clientId", a.delInboundClient)	g.POST("/updateClient/:clientId", a.updateInboundClient)	g.POST("/:id/resetClientTraffic/:email", a.resetClientTraffic)	g.POST("/resetAllTraffics", a.resetAllTraffics)	g.POST("/resetAllClientTraffics/:id", a.resetAllClientTraffics)}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) getClientTraffics(c *gin.Context) {	email := c.Param("email")	clientTraffics, err := a.inboundService.GetClientTrafficByEmail(email)	if err != nil {		jsonMsg(c, "Error getting traffics", err)		return	}	jsonObj(c, clientTraffics, 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) getClientIps(c *gin.Context) {	email := c.Param("email")	ips, err := a.inboundService.GetInboundClientIps(email)	if err != nil {		jsonObj(c, "No IP Record", nil)		return	}	jsonObj(c, ips, nil)}func (a *InboundController) clearClientIps(c *gin.Context) {	email := c.Param("email")	err := a.inboundService.ClearClientIps(email)	if err != nil {		jsonMsg(c, "Revise", err)		return	}	jsonMsg(c, "Log Cleared", nil)}func (a *InboundController) addInboundClient(c *gin.Context) {	data := &model.Inbound{}	err := c.ShouldBind(data)	if err != nil {		jsonMsg(c, I18n(c, "pages.inbounds.revise"), err)		return	}	err = a.inboundService.AddInboundClient(data)	if err != nil {		jsonMsg(c, "something worng!", err)		return	}	jsonMsg(c, "Client(s) added", nil)	if err == nil {		a.xrayService.SetToNeedRestart()	}}func (a *InboundController) delInboundClient(c *gin.Context) {	id, err := strconv.Atoi(c.Param("id"))	if err != nil {		jsonMsg(c, I18n(c, "pages.inbounds.revise"), err)		return	}	clientId := c.Param("clientId")	err = a.inboundService.DelInboundClient(id, clientId)	if err != nil {		jsonMsg(c, "something worng!", err)		return	}	jsonMsg(c, "Client deleted", nil)	if err == nil {		a.xrayService.SetToNeedRestart()	}}func (a *InboundController) updateInboundClient(c *gin.Context) {	clientId := c.Param("clientId")	inbound := &model.Inbound{}	err := c.ShouldBind(inbound)	if err != nil {		jsonMsg(c, I18n(c, "pages.inbounds.revise"), err)		return	}	err = a.inboundService.UpdateInboundClient(inbound, clientId)	if err != nil {		jsonMsg(c, "something worng!", err)		return	}	jsonMsg(c, "Client updated", nil)	if err == nil {		a.xrayService.SetToNeedRestart()	}}func (a *InboundController) resetClientTraffic(c *gin.Context) {	id, err := strconv.Atoi(c.Param("id"))	if err != nil {		jsonMsg(c, I18n(c, "pages.inbounds.revise"), err)		return	}	email := c.Param("email")	err = a.inboundService.ResetClientTraffic(id, email)	if err != nil {		jsonMsg(c, "something worng!", err)		return	}	jsonMsg(c, "traffic reseted", nil)	if err == nil {		a.xrayService.SetToNeedRestart()	}}func (a *InboundController) resetAllTraffics(c *gin.Context) {	err := a.inboundService.ResetAllTraffics()	if err != nil {		jsonMsg(c, "something worng!", err)		return	}	jsonMsg(c, "All traffics reseted", nil)}func (a *InboundController) resetAllClientTraffics(c *gin.Context) {	id, err := strconv.Atoi(c.Param("id"))	if err != nil {		jsonMsg(c, I18n(c, "pages.inbounds.revise"), err)		return	}	err = a.inboundService.ResetAllClientTraffics(id)	if err != nil {		jsonMsg(c, "something worng!", err)		return	}	jsonMsg(c, "All traffics of client reseted", nil)}
 |