diff options
Diffstat (limited to 'echo/middleware/xff.go')
-rw-r--r-- | echo/middleware/xff.go | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/echo/middleware/xff.go b/echo/middleware/xff.go new file mode 100644 index 0000000..d110e12 --- /dev/null +++ b/echo/middleware/xff.go | |||
@@ -0,0 +1,20 @@ | |||
1 | package middleware | ||
2 | |||
3 | import ( | ||
4 | "net" | ||
5 | |||
6 | "github.com/labstack/echo/v4" | ||
7 | ) | ||
8 | |||
9 | func ExtractIPFromXFFHeaders(trustLinkLocal bool, ips []string) (echo.IPExtractor, error) { | ||
10 | xffOpts := []echo.TrustOption{echo.TrustLinkLocal(trustLinkLocal)} | ||
11 | for _, r := range ips { | ||
12 | _, pn, err := net.ParseCIDR(r) | ||
13 | if err != nil { | ||
14 | return nil, err | ||
15 | } | ||
16 | xffOpts = append(xffOpts, echo.TrustIPRange(pn)) | ||
17 | } | ||
18 | |||
19 | return echo.ExtractIPFromXFFHeader(xffOpts...), nil | ||
20 | } | ||