feat: grpc / web get real ip

This commit is contained in:
naiba
2024-11-22 00:19:36 +08:00
parent cde2ef3bd7
commit d699d0ee87
5 changed files with 78 additions and 5 deletions

View File

@@ -5,6 +5,7 @@ import (
"fmt"
"log"
"net/http"
"net/netip"
"os"
"path/filepath"
"strings"
@@ -21,7 +22,6 @@ import (
)
func ServeWeb() http.Handler {
gin.SetMode(gin.ReleaseMode)
r := gin.Default()
@@ -34,12 +34,39 @@ func ServeWeb() http.Handler {
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler))
}
r.Use(realIp)
r.Use(recordPath)
routers(r)
return r
}
func realIp(c *gin.Context) {
if singleton.Conf.RealIPHeader == "" {
c.Next()
return
}
if singleton.Conf.RealIPHeader == model.ConfigUsePeerIP {
c.Set(model.CtxKeyRealIPStr, c.RemoteIP())
c.Next()
return
}
vals := c.Request.Header.Get(singleton.Conf.RealIPHeader)
if vals == "" {
c.AbortWithStatusJSON(http.StatusOK, model.CommonResponse[any]{Success: false, Error: "real ip header not found"})
return
}
ip, err := netip.ParseAddr(vals)
if err != nil {
c.AbortWithStatusJSON(http.StatusOK, model.CommonResponse[any]{Success: false, Error: err.Error()})
return
}
c.Set(model.CtxKeyRealIPStr, ip.String())
c.Next()
}
func routers(r *gin.Engine) {
authMiddleware, err := jwt.New(initParams())
if err != nil {
@@ -127,6 +154,7 @@ func routers(r *gin.Engine) {
}
func recordPath(c *gin.Context) {
log.Printf("bingo web real ip: %s", c.GetString(model.CtxKeyRealIPStr))
url := c.Request.URL.String()
for _, p := range c.Params {
url = strings.Replace(url, p.Value, ":"+p.Key, 1)