Documentation ¶
Index ¶
- Constants
- Variables
- func BumpMax[T Ordered](d *T, s T)
- func BumpMaxIfNonZero[T Ordered](d *T, s T)
- func BumpMaxTime(d *time.Time, s time.Time)
- func BumpMin[T Ordered](d *T, s T)
- func BumpMinIfNonZero[T Ordered](d *T, s T)
- func BumpMinTime(d *time.Time, s time.Time)
- func CopyURLValues(dest, src url.Values)
- func EnumChunks[T any](list []T, chunkSize int, f func(chunk []T))
- func FilterFunc[S ~[]E, E comparable](s S, f func(E) bool) S
- func FilterOut[S ~[]E, E comparable](s S, undesired E) S
- func FuncName(f interface{}) string
- func IsValidDomain(domain string) bool
- func IsValidEmail(email string) bool
- func MustParseCIDR(s string) *net.IPNet
- func MustParseCIDRs(s string) []*net.IPNet
- func Prepend[S ~[]E, E any](s S, elems ...E) S
- func PureFuncName(s string) string
- func TrimPort(hostport string) string
- func URLWithValues(urlStr string, values url.Values) string
- func VerifyBasicAuth(w http.ResponseWriter, r *http.Request, ...) (username string, authenticated bool)
- func YesNo(v bool, yes, no string) string
- type IPForwarding
- type Ordered
Examples ¶
Constants ¶
View Source
const ( XForwardedFor = "X-Forwarded-For" XForwardedHost = "X-Forwarded-Host" XForwardedProto = "X-Forwarded-Proto" )
Variables ¶
View Source
var ( LoopbackIPv4CIRD = MustParseCIDR("127.0.0.1/32") LoopbackIPv6CIRD = MustParseCIDR("::1/128") AnyIPv4CIRD = MustParseCIDR("0.0.0.0/0") AnyIPv6CIRD = MustParseCIDR("::0/0") IPForwardingFromNoone = &IPForwarding{} IPForwardingFromAnyone = &IPForwarding{[]*net.IPNet{LoopbackIPv4CIRD, LoopbackIPv6CIRD}} IPForwardingFromLocalhost = &IPForwarding{[]*net.IPNet{LoopbackIPv4CIRD, LoopbackIPv6CIRD}} )
Functions ¶
func BumpMaxIfNonZero ¶
func BumpMaxIfNonZero[T Ordered](d *T, s T)
func BumpMinIfNonZero ¶
func BumpMinIfNonZero[T Ordered](d *T, s T)
func CopyURLValues ¶ added in v0.2.2
func EnumChunks ¶
func FilterFunc ¶ added in v0.2.2
func FilterFunc[S ~[]E, E comparable](s S, f func(E) bool) S
func FilterOut ¶ added in v0.2.2
func FilterOut[S ~[]E, E comparable](s S, undesired E) S
func IsValidDomain ¶ added in v0.2.2
func IsValidEmail ¶ added in v0.2.2
func MustParseCIDR ¶ added in v0.2.2
func MustParseCIDRs ¶ added in v0.2.2
func PureFuncName ¶
func TrimPort ¶ added in v0.2.2
TrimPort removes :port part (if any) from the given string and returns just the hostname.
func VerifyBasicAuth ¶ added in v0.2.2
Types ¶
type IPForwarding ¶ added in v0.2.2
Example ¶
forwardingFrom127 := &IPForwarding{ ProxyIPs: MustParseCIDRs("127.0.0.0/8"), } try := func(desc string, r *http.Request) { fmt.Printf("\n== %s from %v via %v:\n", desc, r.RemoteAddr, strings.Join(r.Header.Values(XForwardedFor), " | ")) fmt.Printf("IPForwardingFrom127 => ") fmt.Println(forwardingFrom127.FromRequest(r)) fmt.Printf("IPForwardingFromLocalhost => ") fmt.Println(IPForwardingFromLocalhost.FromRequest(r)) fmt.Printf("IPForwardingFromNoone => ") fmt.Println(IPForwardingFromNoone.FromRequest(r)) } try("direct request", &http.Request{ RemoteAddr: "127.0.0.1:23456", Host: "localhost", Header: http.Header{}, }) try("localhost-proxied request", &http.Request{ RemoteAddr: "127.0.0.1:23456", Host: "localhost", Header: http.Header{ XForwardedFor: {"1.2.3.4"}, XForwardedHost: {"example.com"}, XForwardedProto: {"https"}, }, }) try("remotely-proxied request", &http.Request{ RemoteAddr: "11.22.33.44:23456", Host: "localhost", Header: http.Header{ XForwardedFor: {"1.2.3.4"}, XForwardedHost: {"example.com"}, XForwardedProto: {"https"}, }, }) try("request with multiple proxies", &http.Request{ RemoteAddr: "127.0.0.1:23456", Host: "localhost", Header: http.Header{ XForwardedFor: {"1.2.3.4, 127.1.2.3"}, XForwardedHost: {"example.com"}, XForwardedProto: {"https"}, }, }) try("request with multiple proxies in several headers", &http.Request{ RemoteAddr: "127.0.0.1:23456", Host: "localhost", Header: http.Header{ XForwardedFor: {"1.2.3.4, 1.2.3.5", "1.2.3.6", "127.1.2.3"}, XForwardedHost: {"example.com"}, XForwardedProto: {"https"}, }, })
Output: == direct request from 127.0.0.1:23456 via : IPForwardingFrom127 => 127.0.0.1 localhost false IPForwardingFromLocalhost => 127.0.0.1 localhost false IPForwardingFromNoone => 127.0.0.1 localhost false == localhost-proxied request from 127.0.0.1:23456 via 1.2.3.4: IPForwardingFrom127 => 1.2.3.4 example.com true IPForwardingFromLocalhost => 1.2.3.4 example.com true IPForwardingFromNoone => 127.0.0.1 localhost false == remotely-proxied request from 11.22.33.44:23456 via 1.2.3.4: IPForwardingFrom127 => 11.22.33.44 localhost false IPForwardingFromLocalhost => 11.22.33.44 localhost false IPForwardingFromNoone => 11.22.33.44 localhost false == request with multiple proxies from 127.0.0.1:23456 via 1.2.3.4, 127.1.2.3: IPForwardingFrom127 => 1.2.3.4 example.com true IPForwardingFromLocalhost => 127.1.2.3 example.com true IPForwardingFromNoone => 127.0.0.1 localhost false == request with multiple proxies in several headers from 127.0.0.1:23456 via 1.2.3.4, 1.2.3.5 | 1.2.3.6 | 127.1.2.3: IPForwardingFrom127 => 1.2.3.6 example.com true IPForwardingFromLocalhost => 127.1.2.3 example.com true IPForwardingFromNoone => 127.0.0.1 localhost false
func (*IPForwarding) FromRequest ¶ added in v0.2.2
func (*IPForwarding) IsWhitelistedProxy ¶ added in v0.2.2
func (conf *IPForwarding) IsWhitelistedProxy(ip net.IP) bool
Click to show internal directories.
Click to hide internal directories.