Documentation ¶
Index ¶
- Variables
- func ClientIP(r *http.Request) string
- func DisallowIPPrivateAddresses(ipOrHostnameOrURL string) error
- func DisallowPrivateIPAddressesWhenSet(ipOrHostnameOrURL string) error
- func GetClientIPAddressesWithoutInternalIPs(ipAddresses []string) (string, error)
- func GetResponseMeta(w http.ResponseWriter) (status, size int)
- func HasContentType(r *http.Request, mimetypes ...string) bool
- func IncomingRequestURL(r *http.Request) *url.URL
- func MustNewRequest(method, url string, body io.Reader, contentType string) *http.Request
- func NewChanHandler(buf int) (http.Handler, chan<- http.HandlerFunc)
- func NewRequestForm(method, url string, data url.Values) (*http.Request, error)
- func NewRequestJSON(method, url string, data interface{}) (*http.Request, error)
- func NewResilientClient(opts ...ResilientOptions) *retryablehttp.Client
- func WaitForEndpoint(ctx context.Context, endpoint string, opts ...retry.Option) error
- func WaitForEndpointWithClient(ctx context.Context, client *http.Client, endpoint string, ...) error
- type CompressionRequestReader
- type ErrPrivateIPAddressDisallowed
- type NoInternalIPRoundTripper
- type ResilientOptions
- func ResilientClientAllowInternalIPRequestsTo(urls ...string) ResilientOptions
- func ResilientClientDisallowInternalIPs() ResilientOptions
- func ResilientClientWithClient(c *http.Client) ResilientOptions
- func ResilientClientWithConnectionTimeout(connTimeout time.Duration) ResilientOptions
- func ResilientClientWithLogger(l *logrusx.Logger) ResilientOptions
- func ResilientClientWithMaxRetry(retryMax int) ResilientOptions
- func ResilientClientWithMaxRetryWait(retryWaitMax time.Duration) ResilientOptions
- func ResilientClientWithMinxRetryWait(retryWaitMin time.Duration) ResilientOptions
- func ResilientClientWithTracer(tracer trace.Tracer) ResilientOptions
- type TransportWithHeader
- type TransportWithHost
Constants ¶
This section is empty.
Variables ¶
var NoInternalDialer = &net.Dialer{ Timeout: 30 * time.Second, KeepAlive: 30 * time.Second, Control: func(network, address string, _ syscall.RawConn) error { if !(network == "tcp4" || network == "tcp6") { return ErrPrivateIPAddressDisallowed(fmt.Errorf("%s is not a safe network type", network)) } host, _, err := net.SplitHostPort(address) if err != nil { return ErrPrivateIPAddressDisallowed(fmt.Errorf("%s is not a valid host/port pair: %s", address, err)) } ip := net.ParseIP(host) if ip == nil { return ErrPrivateIPAddressDisallowed(fmt.Errorf("%s is not a valid IP address", host)) } if ip.IsPrivate() || ip.IsLoopback() || ip.IsUnspecified() { return ErrPrivateIPAddressDisallowed(fmt.Errorf("%s is not a public IP address", ip)) } return nil }, }
var NoInternalTransport http.RoundTripper = &http.Transport{ Proxy: http.ProxyFromEnvironment, DialContext: NoInternalDialer.DialContext, ForceAttemptHTTP2: true, MaxIdleConns: 100, IdleConnTimeout: 90 * time.Second, TLSHandshakeTimeout: 10 * time.Second, ExpectContinueTimeout: 1 * time.Second, }
Functions ¶
func DisallowIPPrivateAddresses ¶ added in v0.0.334
DisallowIPPrivateAddresses returns nil for a domain (with NS lookup), IP, or IPv6 address if it does not resolve to a private IP subnet. This is a first level of defense against SSRF attacks by disallowing any domain or IP to resolve to a private network range.
Please keep in mind that validations for domains is valid only when looking up. A malicious actor could easily update the DSN record post validation to point to an internal IP
func DisallowPrivateIPAddressesWhenSet ¶ added in v0.0.334
DisallowPrivateIPAddressesWhenSet is a wrapper for DisallowIPPrivateAddresses which returns valid when ipOrHostnameOrURL is empty.
func GetClientIPAddressesWithoutInternalIPs ¶ added in v0.0.496
func GetResponseMeta ¶ added in v0.0.302
func GetResponseMeta(w http.ResponseWriter) (status, size int)
func HasContentType ¶ added in v0.0.81
HasContentType determines whether the request `content-type` includes a server-acceptable mime-type
Failure should yield an HTTP 415 (`http.StatusUnsupportedMediaType`)
func IncomingRequestURL ¶ added in v0.0.448
IncomingRequestURL returns the URL of the incoming HTTP request by looking at the host, TLS, and X-Forwarded-* headers.
func MustNewRequest ¶ added in v0.0.83
MustNewRequest returns a new *http.Request or fatals.
func NewChanHandler ¶ added in v0.0.297
func NewChanHandler(buf int) (http.Handler, chan<- http.HandlerFunc)
NewChanHandler returns a new handler and corresponding channel for sending handler funcs. Useful for testing. The argument buf specifies the channel capacity, so pass 0 for a sync handler.
func NewRequestForm ¶ added in v0.0.83
NewRequestForm returns a new POST Form *http.Request.
func NewRequestJSON ¶ added in v0.0.83
NewRequestJSON returns a new JSON *http.Request.
func NewResilientClient ¶ added in v0.0.204
func NewResilientClient(opts ...ResilientOptions) *retryablehttp.Client
NewResilientClient creates a new ResilientClient.
func WaitForEndpoint ¶ added in v0.0.405
WaitForEndpoint waits for the endpoint to be available.
Types ¶
type CompressionRequestReader ¶ added in v0.0.110
type CompressionRequestReader struct {
ErrHandler func(w http.ResponseWriter, r *http.Request, err error)
}
func NewCompressionRequestReader ¶ added in v0.0.110
func NewCompressionRequestReader(eh func(w http.ResponseWriter, r *http.Request, err error)) *CompressionRequestReader
func (*CompressionRequestReader) ServeHTTP ¶ added in v0.0.110
func (c *CompressionRequestReader) ServeHTTP(w http.ResponseWriter, r *http.Request, next http.HandlerFunc)
type ErrPrivateIPAddressDisallowed ¶ added in v0.0.418
type ErrPrivateIPAddressDisallowed error
ErrPrivateIPAddressDisallowed is returned when a private IP address is disallowed.
type NoInternalIPRoundTripper ¶ added in v0.0.334
type NoInternalIPRoundTripper struct {
// contains filtered or unexported fields
}
NoInternalIPRoundTripper is a RoundTripper that disallows internal IP addresses.
type ResilientOptions ¶ added in v0.0.204
type ResilientOptions func(o *resilientOptions)
ResilientOptions is a set of options for the ResilientClient.
func ResilientClientAllowInternalIPRequestsTo ¶ added in v0.0.460
func ResilientClientAllowInternalIPRequestsTo(urls ...string) ResilientOptions
ResilientClientAllowInternalIPRequestsTo allows requests to the exact matching URLs even if they are internal IPs.
func ResilientClientDisallowInternalIPs ¶ added in v0.0.334
func ResilientClientDisallowInternalIPs() ResilientOptions
ResilientClientDisallowInternalIPs disallows internal IPs from being used.
func ResilientClientWithClient ¶ added in v0.0.204
func ResilientClientWithClient(c *http.Client) ResilientOptions
ResilientClientWithClient sets the underlying http client to use.
func ResilientClientWithConnectionTimeout ¶ added in v0.0.207
func ResilientClientWithConnectionTimeout(connTimeout time.Duration) ResilientOptions
ResilientClientWithConnectionTimeout sets the connection timeout for the client.
func ResilientClientWithLogger ¶ added in v0.0.204
func ResilientClientWithLogger(l *logrusx.Logger) ResilientOptions
ResilientClientWithLogger sets the logger to be used by the client.
func ResilientClientWithMaxRetry ¶ added in v0.0.204
func ResilientClientWithMaxRetry(retryMax int) ResilientOptions
ResilientClientWithMaxRetry sets the maximum number of retries.
func ResilientClientWithMaxRetryWait ¶ added in v0.0.204
func ResilientClientWithMaxRetryWait(retryWaitMax time.Duration) ResilientOptions
ResilientClientWithMaxRetryWait sets the maximum wait time for a retry.
func ResilientClientWithMinxRetryWait ¶ added in v0.0.204
func ResilientClientWithMinxRetryWait(retryWaitMin time.Duration) ResilientOptions
ResilientClientWithMinxRetryWait sets the minimum wait time between retries.
func ResilientClientWithTracer ¶ added in v0.0.337
func ResilientClientWithTracer(tracer trace.Tracer) ResilientOptions
ResilientClientWithTracer wraps the http clients transport with a tracing instrumentation
type TransportWithHeader ¶ added in v0.0.407
type TransportWithHeader struct { http.RoundTripper // contains filtered or unexported fields }
TransportWithHeader is an http.RoundTripper that always uses the values from the given header.
func NewTransportWithHeader ¶ added in v0.0.407
func NewTransportWithHeader(h http.Header) *TransportWithHeader
NewTransportWithHeader returns a new http.Transport that always uses the values from the given header.
func WrapTransportWithHeader ¶ added in v0.0.488
func WrapTransportWithHeader(parent http.RoundTripper, h http.Header) *TransportWithHeader
WrapTransportWithHeader wraps a http.Transport to always use the values from the given header.
type TransportWithHost ¶ added in v0.0.407
type TransportWithHost struct { http.RoundTripper // contains filtered or unexported fields }
TransportWithHost is an http.RoundTripper that always uses the given host.
func NewTransportWithHost ¶ added in v0.0.407
func NewTransportWithHost(host string) *TransportWithHost
NewTransportWithHost returns a new http.Transport that always uses the given host.
func WrapRoundTripperWithHost ¶ added in v0.0.408
func WrapRoundTripperWithHost(parent http.RoundTripper, host string) *TransportWithHost
WrapRoundTripperWithHost wraps a http.RoundTripper that always uses the given host.