aboutsummaryrefslogtreecommitdiff
path: root/echo/middleware/xff.go
blob: d110e1275f19de9ffa1d53fd5a7de1f0f7f308b0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package middleware

import (
	"net"

	"github.com/labstack/echo/v4"
)

func ExtractIPFromXFFHeaders(trustLinkLocal bool, ips []string) (echo.IPExtractor, error) {
	xffOpts := []echo.TrustOption{echo.TrustLinkLocal(trustLinkLocal)}
	for _, r := range ips {
		_, pn, err := net.ParseCIDR(r)
		if err != nil {
			return nil, err
		}
		xffOpts = append(xffOpts, echo.TrustIPRange(pn))
	}

	return echo.ExtractIPFromXFFHeader(xffOpts...), nil
}