123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- package controller
- import (
- "github.com/gin-gonic/gin"
- "go.uber.org/atomic"
- "log"
- "strconv"
- "x-ui/database/model"
- "x-ui/logger"
- "x-ui/web/global"
- "x-ui/web/service"
- "x-ui/web/session"
- )
- type XUIController struct {
- BaseController
- inboundService service.InboundService
- xrayService service.XrayService
- isNeedXrayRestart atomic.Bool
- }
- func NewXUIController(g *gin.RouterGroup) *XUIController {
- a := &XUIController{}
- a.initRouter(g)
- a.startTask()
- return a
- }
- func (a *XUIController) initRouter(g *gin.RouterGroup) {
- g = g.Group("/xui")
- g.Use(a.checkLogin)
- g.GET("/", a.index)
- g.GET("/inbounds", a.inbounds)
- g.POST("/inbounds", a.getInbounds)
- g.POST("/inbound/add", a.addInbound)
- g.POST("/inbound/del/:id", a.delInbound)
- g.POST("/inbound/update/:id", a.updateInbound)
- g.GET("/setting", a.setting)
- }
- func (a *XUIController) startTask() {
- webServer := global.GetWebServer()
- c := webServer.GetCron()
- c.AddFunc("@every 10s", func() {
- if a.isNeedXrayRestart.Load() {
- err := a.xrayService.RestartXray()
- if err != nil {
- logger.Error("restart xray failed:", err)
- }
- a.isNeedXrayRestart.Store(false)
- }
- })
- }
- func (a *XUIController) index(c *gin.Context) {
- html(c, "index.html", "系统状态", nil)
- }
- func (a *XUIController) inbounds(c *gin.Context) {
- html(c, "inbounds.html", "入站列表", nil)
- }
- func (a *XUIController) setting(c *gin.Context) {
- html(c, "setting.html", "设置", nil)
- }
- func (a *XUIController) getInbounds(c *gin.Context) {
- user := session.GetLoginUser(c)
- inbounds, err := a.inboundService.GetInbounds(user.Id)
- if err != nil {
- jsonMsg(c, "获取", err)
- return
- }
- jsonObj(c, inbounds, nil)
- }
- func (a *XUIController) addInbound(c *gin.Context) {
- inbound := &model.Inbound{}
- err := c.ShouldBind(inbound)
- if err != nil {
- jsonMsg(c, "添加", err)
- return
- }
- user := session.GetLoginUser(c)
- inbound.UserId = user.Id
- inbound.Enable = true
- log.Println(inbound)
- err = a.inboundService.AddInbound(inbound)
- jsonMsg(c, "添加", err)
- if err == nil {
- a.isNeedXrayRestart.Store(true)
- }
- }
- func (a *XUIController) delInbound(c *gin.Context) {
- id, err := strconv.Atoi(c.Param("id"))
- if err != nil {
- jsonMsg(c, "删除", err)
- return
- }
- err = a.inboundService.DelInbound(id)
- jsonMsg(c, "删除", err)
- if err == nil {
- a.isNeedXrayRestart.Store(true)
- }
- }
- func (a *XUIController) updateInbound(c *gin.Context) {
- id, err := strconv.Atoi(c.Param("id"))
- if err != nil {
- jsonMsg(c, "修改", err)
- return
- }
- inbound := &model.Inbound{
- Id: id,
- }
- err = c.ShouldBind(inbound)
- if err != nil {
- jsonMsg(c, "修改", err)
- return
- }
- err = a.inboundService.UpdateInbound(inbound)
- jsonMsg(c, "修改", err)
- if err == nil {
- a.isNeedXrayRestart.Store(true)
- }
- }
|