From f734c821d6e62eca5a206b6048f3cd7d65f3e665 Mon Sep 17 00:00:00 2001 From: Alireza Ahmadi Date: Mon, 4 Dec 2023 19:13:21 +0100 Subject: online users backend #1286 --- web/controller/inbound.go | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'web/controller') diff --git a/web/controller/inbound.go b/web/controller/inbound.go index 8b64fe6e..0fa54cd4 100644 --- a/web/controller/inbound.go +++ b/web/controller/inbound.go @@ -37,6 +37,7 @@ func (a *InboundController) initRouter(g *gin.RouterGroup) { g.POST("/resetAllTraffics", a.resetAllTraffics) g.POST("/resetAllClientTraffics/:id", a.resetAllClientTraffics) g.POST("/delDepletedClients/:id", a.delDepletedClients) + g.POST("/onlines", a.onlines) } func (a *InboundController) getInbounds(c *gin.Context) { @@ -278,3 +279,7 @@ func (a *InboundController) delDepletedClients(c *gin.Context) { } jsonMsg(c, "All delpeted clients are deleted", nil) } + +func (a *InboundController) onlines(c *gin.Context) { + jsonObj(c, a.inboundService.GetOnlineClinets(), nil) +} -- cgit v1.2.3 From 2a8da2ba3cbfbf7ac46e5ba7ba071588f3f2d8b5 Mon Sep 17 00:00:00 2001 From: Alireza Ahmadi Date: Mon, 4 Dec 2023 19:20:46 +0100 Subject: separate xray page #1286 --- web/controller/setting.go | 20 ++++++++--------- web/controller/xraySetting.go | 50 +++++++++++++++++++++++++++++++++++++++++++ web/controller/xui.go | 11 ++++++++-- 3 files changed, 69 insertions(+), 12 deletions(-) create mode 100644 web/controller/xraySetting.go (limited to 'web/controller') diff --git a/web/controller/setting.go b/web/controller/setting.go index 32eccefe..96223c28 100644 --- a/web/controller/setting.go +++ b/web/controller/setting.go @@ -41,7 +41,7 @@ func (a *SettingController) initRouter(g *gin.RouterGroup) { g.POST("/update", a.updateSetting) g.POST("/updateUser", a.updateUser) g.POST("/restartPanel", a.restartPanel) - g.GET("/getDefaultJsonConfig", a.getDefaultJsonConfig) + g.GET("/getDefaultJsonConfig", a.getDefaultXrayConfig) g.POST("/updateUserSecret", a.updateSecret) g.POST("/getUserSecret", a.getUserSecret) } @@ -55,15 +55,6 @@ func (a *SettingController) getAllSetting(c *gin.Context) { jsonObj(c, allSetting, nil) } -func (a *SettingController) getDefaultJsonConfig(c *gin.Context) { - defaultJsonConfig, err := a.settingService.GetDefaultJsonConfig() - if err != nil { - jsonMsg(c, I18nWeb(c, "pages.settings.toasts.getSettings"), err) - return - } - jsonObj(c, defaultJsonConfig, nil) -} - func (a *SettingController) getDefaultSettings(c *gin.Context) { type settingFunc func() (interface{}, error) @@ -169,3 +160,12 @@ func (a *SettingController) getUserSecret(c *gin.Context) { jsonObj(c, user, nil) } } + +func (a *SettingController) getDefaultXrayConfig(c *gin.Context) { + defaultJsonConfig, err := a.settingService.GetDefaultXrayConfig() + if err != nil { + jsonMsg(c, I18nWeb(c, "pages.settings.toasts.getSettings"), err) + return + } + jsonObj(c, defaultJsonConfig, nil) +} diff --git a/web/controller/xraySetting.go b/web/controller/xraySetting.go new file mode 100644 index 00000000..d244d030 --- /dev/null +++ b/web/controller/xraySetting.go @@ -0,0 +1,50 @@ +package controller + +import ( + "x-ui/web/service" + + "github.com/gin-gonic/gin" +) + +type XraySettingController struct { + XraySettingService service.XraySettingService + SettingService service.SettingService +} + +func NewXraySettingController(g *gin.RouterGroup) *XraySettingController { + a := &XraySettingController{} + a.initRouter(g) + return a +} + +func (a *XraySettingController) initRouter(g *gin.RouterGroup) { + g = g.Group("/xray") + + g.POST("/", a.getXraySetting) + g.POST("/update", a.updateSetting) + g.GET("/getDefaultJsonConfig", a.getDefaultXrayConfig) +} + +func (a *XraySettingController) getXraySetting(c *gin.Context) { + xraySetting, err := a.SettingService.GetXrayConfigTemplate() + if err != nil { + jsonMsg(c, I18nWeb(c, "pages.settings.toasts.getSettings"), err) + return + } + jsonObj(c, xraySetting, nil) +} + +func (a *XraySettingController) updateSetting(c *gin.Context) { + xraySetting := c.PostForm("xraySetting") + err := a.XraySettingService.SaveXraySetting(xraySetting) + jsonMsg(c, I18nWeb(c, "pages.settings.toasts.modifySettings"), err) +} + +func (a *XraySettingController) getDefaultXrayConfig(c *gin.Context) { + defaultJsonConfig, err := a.SettingService.GetDefaultXrayConfig() + if err != nil { + jsonMsg(c, I18nWeb(c, "pages.settings.toasts.getSettings"), err) + return + } + jsonObj(c, defaultJsonConfig, nil) +} diff --git a/web/controller/xui.go b/web/controller/xui.go index 700bd52c..5b4c0a18 100644 --- a/web/controller/xui.go +++ b/web/controller/xui.go @@ -7,8 +7,9 @@ import ( type XUIController struct { BaseController - inboundController *InboundController - settingController *SettingController + inboundController *InboundController + settingController *SettingController + xraySettingController *XraySettingController } func NewXUIController(g *gin.RouterGroup) *XUIController { @@ -24,9 +25,11 @@ func (a *XUIController) initRouter(g *gin.RouterGroup) { g.GET("/", a.index) g.GET("/inbounds", a.inbounds) g.GET("/settings", a.settings) + g.GET("/xray", a.xraySettings) a.inboundController = NewInboundController(g) a.settingController = NewSettingController(g) + a.xraySettingController = NewXraySettingController(g) } func (a *XUIController) index(c *gin.Context) { @@ -40,3 +43,7 @@ func (a *XUIController) inbounds(c *gin.Context) { func (a *XUIController) settings(c *gin.Context) { html(c, "settings.html", "pages.settings.title", nil) } + +func (a *XUIController) xraySettings(c *gin.Context) { + html(c, "xray.html", "pages.xray.title", nil) +} -- cgit v1.2.3 From 4d3bea48e11883f0fb99f2e4bb8d943fe162c687 Mon Sep 17 00:00:00 2001 From: MHSanaei Date: Tue, 5 Dec 2023 00:30:47 +0330 Subject: [api] online users Co-Authored-By: Alireza Ahmadi --- web/controller/api.go | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'web/controller') diff --git a/web/controller/api.go b/web/controller/api.go index 32c639f8..73c36787 100644 --- a/web/controller/api.go +++ b/web/controller/api.go @@ -38,6 +38,8 @@ func (a *APIController) initRouter(g *gin.RouterGroup) { g.POST("/resetAllClientTraffics/:id", a.resetAllClientTraffics) g.POST("/delDepletedClients/:id", a.delDepletedClients) g.GET("/createbackup", a.createBackup) + g.POST("/onlines", a.onlines) + a.inboundController = NewInboundController(g) } @@ -104,3 +106,7 @@ func (a *APIController) delDepletedClients(c *gin.Context) { func (a *APIController) createBackup(c *gin.Context) { a.Tgbot.SendBackupToAdmins() } + +func (a *APIController) onlines(c *gin.Context) { + a.inboundController.onlines(c) +} -- cgit v1.2.3 From c419eadf15630518606ab434387079172070d340 Mon Sep 17 00:00:00 2001 From: Alireza Ahmadi Date: Tue, 5 Dec 2023 18:13:36 +0100 Subject: xray setting enhancements #1286 --- web/controller/xraySetting.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'web/controller') diff --git a/web/controller/xraySetting.go b/web/controller/xraySetting.go index d244d030..a4c8b600 100644 --- a/web/controller/xraySetting.go +++ b/web/controller/xraySetting.go @@ -9,6 +9,7 @@ import ( type XraySettingController struct { XraySettingService service.XraySettingService SettingService service.SettingService + InboundService service.InboundService } func NewXraySettingController(g *gin.RouterGroup) *XraySettingController { @@ -31,7 +32,13 @@ func (a *XraySettingController) getXraySetting(c *gin.Context) { jsonMsg(c, I18nWeb(c, "pages.settings.toasts.getSettings"), err) return } - jsonObj(c, xraySetting, nil) + inboundTags, err := a.InboundService.GetInboundTags() + if err != nil { + jsonMsg(c, I18nWeb(c, "pages.settings.toasts.getSettings"), err) + return + } + xrayResponse := "{ \"xraySetting\": " + xraySetting + ", \"inboundTags\": " + inboundTags + " }" + jsonObj(c, xrayResponse, nil) } func (a *XraySettingController) updateSetting(c *gin.Context) { -- cgit v1.2.3 From 5e47b4e94925c2272a7f0a4cc355cede72c671a4 Mon Sep 17 00:00:00 2001 From: Alireza Ahmadi Date: Fri, 8 Dec 2023 17:18:51 +0100 Subject: pagination and sub URI support #1300 --- web/controller/setting.go | 41 ++++------------------------------------- 1 file changed, 4 insertions(+), 37 deletions(-) (limited to 'web/controller') diff --git a/web/controller/setting.go b/web/controller/setting.go index 96223c28..64cae71b 100644 --- a/web/controller/setting.go +++ b/web/controller/setting.go @@ -56,44 +56,11 @@ func (a *SettingController) getAllSetting(c *gin.Context) { } func (a *SettingController) getDefaultSettings(c *gin.Context) { - type settingFunc func() (interface{}, error) - - settings := map[string]settingFunc{ - "expireDiff": func() (interface{}, error) { return a.settingService.GetExpireDiff() }, - "trafficDiff": func() (interface{}, error) { return a.settingService.GetTrafficDiff() }, - "defaultCert": func() (interface{}, error) { return a.settingService.GetCertFile() }, - "defaultKey": func() (interface{}, error) { return a.settingService.GetKeyFile() }, - "tgBotEnable": func() (interface{}, error) { return a.settingService.GetTgbotenabled() }, - "subEnable": func() (interface{}, error) { return a.settingService.GetSubEnable() }, - "subPort": func() (interface{}, error) { return a.settingService.GetSubPort() }, - "subPath": func() (interface{}, error) { return a.settingService.GetSubPath() }, - "subDomain": func() (interface{}, error) { return a.settingService.GetSubDomain() }, - "subKeyFile": func() (interface{}, error) { return a.settingService.GetSubKeyFile() }, - "subCertFile": func() (interface{}, error) { return a.settingService.GetSubCertFile() }, - "subEncrypt": func() (interface{}, error) { return a.settingService.GetSubEncrypt() }, - "subShowInfo": func() (interface{}, error) { return a.settingService.GetSubShowInfo() }, - } - - result := make(map[string]interface{}) - - for key, fn := range settings { - value, err := fn() - if err != nil { - jsonMsg(c, I18nWeb(c, "pages.settings.toasts.getSettings"), err) - return - } - result[key] = value - } - - subTLS := false - if result["subKeyFile"] != "" || result["subCertFile"] != "" { - subTLS = true + result, err := a.settingService.GetDefaultSettings(c.Request.Host) + if err != nil { + jsonMsg(c, I18nWeb(c, "pages.settings.toasts.getSettings"), err) + return } - result["subTLS"] = subTLS - - delete(result, "subKeyFile") - delete(result, "subCertFile") - jsonObj(c, result, nil) } -- cgit v1.2.3 From 35feef650f793ffbec2af51a18fd25d8b0beefb1 Mon Sep 17 00:00:00 2001 From: Alireza Ahmadi Date: Fri, 8 Dec 2023 20:08:44 +0100 Subject: import-export inbound #1300 --- web/controller/inbound.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'web/controller') diff --git a/web/controller/inbound.go b/web/controller/inbound.go index 0fa54cd4..123c486f 100644 --- a/web/controller/inbound.go +++ b/web/controller/inbound.go @@ -1,6 +1,7 @@ package controller import ( + "encoding/json" "fmt" "strconv" "x-ui/database/model" @@ -37,6 +38,7 @@ func (a *InboundController) initRouter(g *gin.RouterGroup) { g.POST("/resetAllTraffics", a.resetAllTraffics) g.POST("/resetAllClientTraffics/:id", a.resetAllClientTraffics) g.POST("/delDepletedClients/:id", a.delDepletedClients) + g.POST("/import", a.importInbound) g.POST("/onlines", a.onlines) } @@ -266,6 +268,31 @@ func (a *InboundController) resetAllClientTraffics(c *gin.Context) { jsonMsg(c, "All traffics of client reseted", nil) } +func (a *InboundController) importInbound(c *gin.Context) { + inbound := &model.Inbound{} + err := json.Unmarshal([]byte(c.PostForm("data")), inbound) + if err != nil { + jsonMsg(c, "Something went wrong!", err) + return + } + user := session.GetLoginUser(c) + inbound.Id = 0 + inbound.UserId = user.Id + inbound.Tag = fmt.Sprintf("inbound-%v", inbound.Port) + + for index := range inbound.ClientStats { + inbound.ClientStats[index].Id = 0 + inbound.ClientStats[index].Enable = true + } + + needRestart := false + inbound, needRestart, err = a.inboundService.AddInbound(inbound) + jsonMsgObj(c, I18nWeb(c, "pages.inbounds.create"), inbound, err) + if err == nil && needRestart { + a.xrayService.SetToNeedRestart() + } +} + func (a *InboundController) delDepletedClients(c *gin.Context) { id, err := strconv.Atoi(c.Param("id")) if err != nil { -- cgit v1.2.3 From 4cb67fd1c3129b83f3750f863caba081453f42b1 Mon Sep 17 00:00:00 2001 From: Alireza Ahmadi Date: Sun, 10 Dec 2023 12:57:39 +0100 Subject: [xray] show xray errors #1300 --- web/controller/xraySetting.go | 57 -------------------------------------- web/controller/xray_setting.go | 63 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 57 deletions(-) delete mode 100644 web/controller/xraySetting.go create mode 100644 web/controller/xray_setting.go (limited to 'web/controller') diff --git a/web/controller/xraySetting.go b/web/controller/xraySetting.go deleted file mode 100644 index a4c8b600..00000000 --- a/web/controller/xraySetting.go +++ /dev/null @@ -1,57 +0,0 @@ -package controller - -import ( - "x-ui/web/service" - - "github.com/gin-gonic/gin" -) - -type XraySettingController struct { - XraySettingService service.XraySettingService - SettingService service.SettingService - InboundService service.InboundService -} - -func NewXraySettingController(g *gin.RouterGroup) *XraySettingController { - a := &XraySettingController{} - a.initRouter(g) - return a -} - -func (a *XraySettingController) initRouter(g *gin.RouterGroup) { - g = g.Group("/xray") - - g.POST("/", a.getXraySetting) - g.POST("/update", a.updateSetting) - g.GET("/getDefaultJsonConfig", a.getDefaultXrayConfig) -} - -func (a *XraySettingController) getXraySetting(c *gin.Context) { - xraySetting, err := a.SettingService.GetXrayConfigTemplate() - if err != nil { - jsonMsg(c, I18nWeb(c, "pages.settings.toasts.getSettings"), err) - return - } - inboundTags, err := a.InboundService.GetInboundTags() - if err != nil { - jsonMsg(c, I18nWeb(c, "pages.settings.toasts.getSettings"), err) - return - } - xrayResponse := "{ \"xraySetting\": " + xraySetting + ", \"inboundTags\": " + inboundTags + " }" - jsonObj(c, xrayResponse, nil) -} - -func (a *XraySettingController) updateSetting(c *gin.Context) { - xraySetting := c.PostForm("xraySetting") - err := a.XraySettingService.SaveXraySetting(xraySetting) - jsonMsg(c, I18nWeb(c, "pages.settings.toasts.modifySettings"), err) -} - -func (a *XraySettingController) getDefaultXrayConfig(c *gin.Context) { - defaultJsonConfig, err := a.SettingService.GetDefaultXrayConfig() - if err != nil { - jsonMsg(c, I18nWeb(c, "pages.settings.toasts.getSettings"), err) - return - } - jsonObj(c, defaultJsonConfig, nil) -} diff --git a/web/controller/xray_setting.go b/web/controller/xray_setting.go new file mode 100644 index 00000000..d4deacd9 --- /dev/null +++ b/web/controller/xray_setting.go @@ -0,0 +1,63 @@ +package controller + +import ( + "x-ui/web/service" + + "github.com/gin-gonic/gin" +) + +type XraySettingController struct { + XraySettingService service.XraySettingService + SettingService service.SettingService + InboundService service.InboundService + XrayService service.XrayService +} + +func NewXraySettingController(g *gin.RouterGroup) *XraySettingController { + a := &XraySettingController{} + a.initRouter(g) + return a +} + +func (a *XraySettingController) initRouter(g *gin.RouterGroup) { + g = g.Group("/xray") + + g.POST("/", a.getXraySetting) + g.POST("/update", a.updateSetting) + g.GET("/getXrayResult", a.getXrayResult) + g.GET("/getDefaultJsonConfig", a.getDefaultXrayConfig) +} + +func (a *XraySettingController) getXraySetting(c *gin.Context) { + xraySetting, err := a.SettingService.GetXrayConfigTemplate() + if err != nil { + jsonMsg(c, I18nWeb(c, "pages.settings.toasts.getSettings"), err) + return + } + inboundTags, err := a.InboundService.GetInboundTags() + if err != nil { + jsonMsg(c, I18nWeb(c, "pages.settings.toasts.getSettings"), err) + return + } + xrayResponse := "{ \"xraySetting\": " + xraySetting + ", \"inboundTags\": " + inboundTags + " }" + jsonObj(c, xrayResponse, nil) +} + +func (a *XraySettingController) updateSetting(c *gin.Context) { + xraySetting := c.PostForm("xraySetting") + err := a.XraySettingService.SaveXraySetting(xraySetting) + jsonMsg(c, I18nWeb(c, "pages.settings.toasts.modifySettings"), err) +} + +func (a *XraySettingController) getDefaultXrayConfig(c *gin.Context) { + defaultJsonConfig, err := a.SettingService.GetDefaultXrayConfig() + if err != nil { + jsonMsg(c, I18nWeb(c, "pages.settings.toasts.getSettings"), err) + return + } + jsonObj(c, defaultJsonConfig, nil) +} + +func (a *XraySettingController) getXrayResult(c *gin.Context) { + jsonObj(c, a.XrayService.GetXrayResult(), nil) +} -- cgit v1.2.3