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:
authorAhmad Thoriq Najahi <najahi@zephyrus.id>2024-05-24 00:51:19 +0300
committerGitHub <noreply@github.com>2024-05-24 00:51:19 +0300
commitd070a82b3d0149904a5d54ec3608c5789a6a265a (patch)
treeb9bc8ad45977d65763df07982b8f4899e89ac951
parent5ec16301a66a35361608af951ff71d43a3aa53dc (diff)
feat: Enhance host extraction from headers (#2292)
- Refactor SUBController subs and subJsons methods to extract host from X-Forwarded-Host header, falling back to X-Real-IP header and then to the request host if unavailable. - Update html function to extract host from X-Forwarded-Host header, falling back to X-Real-IP header and then to the request host if unavailable. - Update DomainValidatorMiddleware to first attempt to extract host from X-Forwarded-Host header, falling back to X-Real-IP header and then to the request host. Fixes: #2284 Signed-off-by: Ahmad Thoriq Najahi <najahi@zephyrus.id>
-rw-r--r--sub/subController.go26
-rw-r--r--web/controller/util.go13
-rw-r--r--web/middleware/domainValidator.go16
3 files changed, 46 insertions, 9 deletions
diff --git a/sub/subController.go b/sub/subController.go
index 2385b76b..838a2291 100644
--- a/sub/subController.go
+++ b/sub/subController.go
@@ -54,7 +54,18 @@ func (a *SUBController) initRouter(g *gin.RouterGroup) {
func (a *SUBController) subs(c *gin.Context) {
subId := c.Param("subid")
- host, _, _ := net.SplitHostPort(c.Request.Host)
+ host := c.GetHeader("X-Forwarded-Host")
+ if host == "" {
+ host = c.GetHeader("X-Real-IP")
+ }
+ if host == "" {
+ var err error
+ host, _, err = net.SplitHostPort(c.Request.Host)
+ if err != nil {
+ host = c.Request.Host
+ }
+ }
+ host = host
subs, header, err := a.subService.GetSubs(subId, host)
if err != nil || len(subs) == 0 {
c.String(400, "Error!")
@@ -79,7 +90,18 @@ func (a *SUBController) subs(c *gin.Context) {
func (a *SUBController) subJsons(c *gin.Context) {
subId := c.Param("subid")
- host, _, _ := net.SplitHostPort(c.Request.Host)
+ host := c.GetHeader("X-Forwarded-Host")
+ if host == "" {
+ host = c.GetHeader("X-Real-IP")
+ }
+ if host == "" {
+ var err error
+ host, _, err = net.SplitHostPort(c.Request.Host)
+ if err != nil {
+ host = c.Request.Host
+ }
+ }
+ host = host
jsonSub, header, err := a.subJsonService.GetJson(subId, host)
if err != nil || len(jsonSub) == 0 {
c.String(400, "Error!")
diff --git a/web/controller/util.go b/web/controller/util.go
index 17ad75e4..b07aaf0e 100644
--- a/web/controller/util.go
+++ b/web/controller/util.go
@@ -64,7 +64,18 @@ func html(c *gin.Context, name string, title string, data gin.H) {
data = gin.H{}
}
data["title"] = title
- data["host"], _, _ = net.SplitHostPort(c.Request.Host)
+ host := c.GetHeader("X-Forwarded-Host")
+ if host == "" {
+ host = c.GetHeader("X-Real-IP")
+ }
+ if host == "" {
+ var err error
+ host, _, err = net.SplitHostPort(c.Request.Host)
+ if err != nil {
+ host = c.Request.Host
+ }
+ }
+ data["host"] = host
data["request_uri"] = c.Request.RequestURI
data["base_path"] = c.GetString("base_path")
c.HTML(http.StatusOK, name, getContext(data))
diff --git a/web/middleware/domainValidator.go b/web/middleware/domainValidator.go
index 2beecfdb..26a23895 100644
--- a/web/middleware/domainValidator.go
+++ b/web/middleware/domainValidator.go
@@ -9,13 +9,17 @@ import (
func DomainValidatorMiddleware(domain string) gin.HandlerFunc {
return func(c *gin.Context) {
- host, _, _ := net.SplitHostPort(c.Request.Host)
-
- if host != domain {
- c.AbortWithStatus(http.StatusForbidden)
- return
+ host := c.GetHeader("X-Forwarded-Host")
+ if host == "" {
+ host = c.GetHeader("X-Real-IP")
}
-
+ if host == "" {
+ host, _, _ := net.SplitHostPort(c.Request.Host)
+ if host != domain {
+ c.AbortWithStatus(http.StatusForbidden)
+ return
+ }
c.Next()
+ }
}
}