mirror of
https://github.com/alireza0/x-ui.git
synced 2026-06-28 03:30:48 +00:00
143 lines
3.9 KiB
Go
143 lines
3.9 KiB
Go
package controller
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strconv"
|
|
|
|
"github.com/alireza0/x-ui/database/model"
|
|
"github.com/alireza0/x-ui/web/service"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type OutboundController struct {
|
|
outboundService service.OutboundService
|
|
inboundService service.InboundService
|
|
xrayService service.XrayService
|
|
}
|
|
|
|
func NewOutboundController(g *gin.RouterGroup) *OutboundController {
|
|
a := &OutboundController{}
|
|
a.initRouter(g)
|
|
return a
|
|
}
|
|
|
|
func (a *OutboundController) initRouter(g *gin.RouterGroup) {
|
|
g = g.Group("/outbound")
|
|
|
|
g.POST("/list", a.getOutbounds)
|
|
g.POST("/add", a.addOutbound)
|
|
g.POST("/del/:id", a.delOutbound)
|
|
g.POST("/update/:id", a.updateOutbound)
|
|
g.POST("/setFirst/:id", a.setFirstOutbound)
|
|
g.POST("/:id/resetTraffic", a.resetTraffic)
|
|
g.POST("/resetAllTraffics", a.resetAllTraffics)
|
|
g.POST("/onlines", a.onlines)
|
|
g.POST("/test", a.test)
|
|
g.POST("/reverseTags", a.getClientReverseTags)
|
|
}
|
|
|
|
func (a *OutboundController) getOutbounds(c *gin.Context) {
|
|
outbounds, err := a.outboundService.GetAllOutbounds()
|
|
if err != nil {
|
|
jsonMsg(c, I18nWeb(c, "pages.outbounds.obtain"), err)
|
|
return
|
|
}
|
|
jsonObj(c, outbounds, nil)
|
|
}
|
|
|
|
func (a *OutboundController) addOutbound(c *gin.Context) {
|
|
outbound := &model.Outbound{}
|
|
err := c.ShouldBind(outbound)
|
|
if err != nil {
|
|
jsonMsg(c, I18nWeb(c, "pages.outbounds.create"), err)
|
|
return
|
|
}
|
|
outbound, needRestart, err := a.outboundService.AddOutbound(outbound)
|
|
jsonMsgObj(c, I18nWeb(c, "pages.outbounds.create"), outbound, err)
|
|
if err == nil && needRestart {
|
|
a.xrayService.SetToNeedRestart()
|
|
}
|
|
}
|
|
|
|
func (a *OutboundController) delOutbound(c *gin.Context) {
|
|
id, err := strconv.Atoi(c.Param("id"))
|
|
if err != nil {
|
|
jsonMsg(c, I18nWeb(c, "pages.outbounds.delete"), err)
|
|
return
|
|
}
|
|
needRestart, err := a.outboundService.DelOutbound(id)
|
|
jsonMsg(c, I18nWeb(c, "pages.outbounds.delete"), err)
|
|
if err == nil && needRestart {
|
|
a.xrayService.SetToNeedRestart()
|
|
}
|
|
}
|
|
|
|
func (a *OutboundController) updateOutbound(c *gin.Context) {
|
|
id, err := strconv.Atoi(c.Param("id"))
|
|
if err != nil {
|
|
jsonMsg(c, I18nWeb(c, "pages.outbounds.update"), err)
|
|
return
|
|
}
|
|
outbound := &model.Outbound{Id: id}
|
|
err = c.ShouldBind(outbound)
|
|
if err != nil {
|
|
jsonMsg(c, I18nWeb(c, "pages.outbounds.update"), err)
|
|
return
|
|
}
|
|
outbound, needRestart, err := a.outboundService.UpdateOutbound(outbound)
|
|
jsonMsgObj(c, I18nWeb(c, "pages.outbounds.update"), outbound, err)
|
|
if err == nil && needRestart {
|
|
a.xrayService.SetToNeedRestart()
|
|
}
|
|
}
|
|
|
|
func (a *OutboundController) setFirstOutbound(c *gin.Context) {
|
|
id, err := strconv.Atoi(c.Param("id"))
|
|
if err != nil {
|
|
jsonMsg(c, I18nWeb(c, "pages.outbounds.update"), err)
|
|
return
|
|
}
|
|
err = a.outboundService.SetFirstOutbound(id)
|
|
if err == nil {
|
|
a.xrayService.SetToNeedRestart()
|
|
}
|
|
jsonMsg(c, I18nWeb(c, "pages.outbounds.update"), err)
|
|
}
|
|
|
|
func (a *OutboundController) resetTraffic(c *gin.Context) {
|
|
id, err := strconv.Atoi(c.Param("id"))
|
|
if err != nil {
|
|
jsonMsg(c, I18nWeb(c, "pages.outbounds.resetTraffic"), err)
|
|
return
|
|
}
|
|
jsonMsg(c, I18nWeb(c, "pages.outbounds.resetTraffic"), a.outboundService.ResetTraffic(id))
|
|
}
|
|
|
|
func (a *OutboundController) resetAllTraffics(c *gin.Context) {
|
|
jsonMsg(c, I18nWeb(c, "pages.outbounds.resetAllTraffic"), a.outboundService.ResetAllTraffics())
|
|
}
|
|
|
|
func (a *OutboundController) onlines(c *gin.Context) {
|
|
jsonObj(c, a.outboundService.GetOnlineOutbounds(), nil)
|
|
}
|
|
|
|
func (a *OutboundController) getClientReverseTags(c *gin.Context) {
|
|
tags, err := a.inboundService.GetClientReverseTags()
|
|
if err != nil {
|
|
jsonMsg(c, I18nWeb(c, "pages.outbounds.obtain"), err)
|
|
return
|
|
}
|
|
var arr []string
|
|
json.Unmarshal([]byte(tags), &arr)
|
|
jsonObj(c, arr, nil)
|
|
}
|
|
|
|
func (a *OutboundController) test(c *gin.Context) {
|
|
id, err := strconv.Atoi(c.PostForm("id"))
|
|
if err != nil {
|
|
jsonMsg(c, I18nWeb(c, "pages.outbounds.test"), err)
|
|
return
|
|
}
|
|
result, err := a.outboundService.TestOutbound(id)
|
|
jsonObj(c, result, err)
|
|
}
|