Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Liu <30622363+PedroLiu1999@users.noreply.github.com>2026-04-20 01:41:50 +0300
committerGitHub <noreply@github.com>2026-04-20 01:41:50 +0300
commit36b2a586756fc279304170976c9d486498d55919 (patch)
tree71a1dd665fa14a0fc9dad28c3ef421e3e3d7fe7c /web/controller
parent59e98592251cac1dedb93905cb368a3ba93ad19c (diff)
feat: Add NordVPN NordLynx (WireGuard) integration (#3827)
* feat: Add NordVPN NordLynx (WireGuard) integration with dedicated UI and backend services. * remove limit=10 to get all servers * feat: add city selector to NordVPN modal * feat: auto-select best server on country/city change * feat: simplify filter logic and enforce > 7% load * fix --------- Co-authored-by: Sanaei <ho3ein.sanaei@gmail.com>
Diffstat (limited to 'web/controller')
-rw-r--r--web/controller/xray_setting.go28
1 files changed, 28 insertions, 0 deletions
diff --git a/web/controller/xray_setting.go b/web/controller/xray_setting.go
index 5b7a0e26..0c382fb9 100644
--- a/web/controller/xray_setting.go
+++ b/web/controller/xray_setting.go
@@ -17,6 +17,7 @@ type XraySettingController struct {
OutboundService service.OutboundService
XrayService service.XrayService
WarpService service.WarpService
+ NordService service.NordService
}
// NewXraySettingController creates a new XraySettingController and initializes its routes.
@@ -35,6 +36,7 @@ func (a *XraySettingController) initRouter(g *gin.RouterGroup) {
g.POST("/", a.getXraySetting)
g.POST("/warp/:action", a.warp)
+ g.POST("/nord/:action", a.nord)
g.POST("/update", a.updateSetting)
g.POST("/resetOutboundsTraffic", a.resetOutboundsTraffic)
g.POST("/testOutbound", a.testOutbound)
@@ -123,6 +125,32 @@ func (a *XraySettingController) warp(c *gin.Context) {
jsonObj(c, resp, err)
}
+// nord handles NordVPN-related operations based on the action parameter.
+func (a *XraySettingController) nord(c *gin.Context) {
+ action := c.Param("action")
+ var resp string
+ var err error
+ switch action {
+ case "countries":
+ resp, err = a.NordService.GetCountries()
+ case "servers":
+ countryId := c.PostForm("countryId")
+ resp, err = a.NordService.GetServers(countryId)
+ case "reg":
+ token := c.PostForm("token")
+ resp, err = a.NordService.GetCredentials(token)
+ case "setKey":
+ key := c.PostForm("key")
+ resp, err = a.NordService.SetKey(key)
+ case "data":
+ resp, err = a.NordService.GetNordData()
+ case "del":
+ err = a.NordService.DelNordData()
+ }
+
+ jsonObj(c, resp, err)
+}
+
// getOutboundsTraffic retrieves the traffic statistics for outbounds.
func (a *XraySettingController) getOutboundsTraffic(c *gin.Context) {
outboundsTraffic, err := a.OutboundService.GetOutboundsTraffic()