From d070a82b3d0149904a5d54ec3608c5789a6a265a Mon Sep 17 00:00:00 2001 From: Ahmad Thoriq Najahi Date: Fri, 24 May 2024 04:51:19 +0700 Subject: 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 --- web/controller/util.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'web/controller') 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)) -- cgit v1.2.3