From 36b2a586756fc279304170976c9d486498d55919 Mon Sep 17 00:00:00 2001 From: Peter Liu <30622363+PedroLiu1999@users.noreply.github.com> Date: Sun, 19 Apr 2026 23:41:50 +0100 Subject: 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 --- web/controller/xray_setting.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'web/controller') 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() -- cgit v1.2.3