Documentation ¶
Index ¶
- func DisallowIPPrivateAddresses(ipOrHostnameOrURL string) error
- func DisallowPrivateIPAddressesWhenSet(ipOrHostnameOrURL 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 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 ¶
This section is empty.
Functions ¶
func DisallowIPPrivateAddresses ¶
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 ¶
DisallowPrivateIPAddressesWhenSet is a wrapper for DisallowIPPrivateAddresses which returns valid when ipOrHostnameOrURL is empty.
func GetResponseMeta ¶
func GetResponseMeta(w http.ResponseWriter) (status, size int)
func HasContentType ¶
HasContentType determines whether the request `content-type` includes a server-acceptable mime-type
Failure should yield an HTTP 415 (`http.StatusUnsupportedMediaType`)
func IncomingRequestURL ¶
IncomingRequestURL returns the URL of the incoming HTTP request by looking at the host, TLS, and X-Forwarded-* headers.
func MustNewRequest ¶
MustNewRequest returns a new *http.Request or fatals.
func NewChanHandler ¶
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 ¶
NewRequestForm returns a new POST Form *http.Request.
func NewRequestJSON ¶
NewRequestJSON returns a new JSON *http.Request.
func NewResilientClient ¶
func NewResilientClient(opts ...ResilientOptions) *retryablehttp.Client
NewResilientClient creates a new ResilientClient.
func WaitForEndpoint ¶
WaitForEndpoint waits for the endpoint to be available.
Types ¶
type CompressionRequestReader ¶
type CompressionRequestReader struct {
ErrHandler func(w http.ResponseWriter, r *http.Request, err error)
}
func NewCompressionRequestReader ¶
func NewCompressionRequestReader(eh func(w http.ResponseWriter, r *http.Request, err error)) *CompressionRequestReader
func (*CompressionRequestReader) ServeHTTP ¶
func (c *CompressionRequestReader) ServeHTTP(w http.ResponseWriter, r *http.Request, next http.HandlerFunc)
type ErrPrivateIPAddressDisallowed ¶
type ErrPrivateIPAddressDisallowed error
ErrPrivateIPAddressDisallowed is returned when a private IP address is disallowed.
type NoInternalIPRoundTripper ¶
type NoInternalIPRoundTripper struct {
http.RoundTripper
}
NoInternalIPRoundTripper is a RoundTripper that disallows internal IP addresses.
type ResilientOptions ¶
type ResilientOptions func(o *resilientOptions)
ResilientOptions is a set of options for the ResilientClient.
func ResilientClientDisallowInternalIPs ¶
func ResilientClientDisallowInternalIPs() ResilientOptions
ResilientClientDisallowInternalIPs disallows internal IPs from being used.
func ResilientClientWithClient ¶
func ResilientClientWithClient(c *http.Client) ResilientOptions
ResilientClientWithClient sets the underlying http client to use.
func ResilientClientWithConnectionTimeout ¶
func ResilientClientWithConnectionTimeout(connTimeout time.Duration) ResilientOptions
ResilientClientWithConnectionTimeout sets the connection timeout for the client.
func ResilientClientWithLogger ¶
func ResilientClientWithLogger(l *logrusx.Logger) ResilientOptions
ResilientClientWithLogger sets the logger to be used by the client.
func ResilientClientWithMaxRetry ¶
func ResilientClientWithMaxRetry(retryMax int) ResilientOptions
ResilientClientWithMaxRetry sets the maximum number of retries.
func ResilientClientWithMaxRetryWait ¶
func ResilientClientWithMaxRetryWait(retryWaitMax time.Duration) ResilientOptions
ResilientClientWithMaxRetryWait sets the maximum wait time for a retry.
func ResilientClientWithMinxRetryWait ¶
func ResilientClientWithMinxRetryWait(retryWaitMin time.Duration) ResilientOptions
ResilientClientWithMinxRetryWait sets the minimum wait time between retries.
func ResilientClientWithTracer ¶
func ResilientClientWithTracer(tracer trace.Tracer) ResilientOptions
ResilientClientWithTracer wraps the http clients transport with a tracing instrumentation
type TransportWithHeader ¶
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 ¶
func NewTransportWithHeader(h http.Header) *TransportWithHeader
NewTransportWithHeader returns a new http.Transport that always uses the values from the given header.
type TransportWithHost ¶
type TransportWithHost struct { http.RoundTripper // contains filtered or unexported fields }
TransportWithHost is an http.RoundTripper that always uses the given host.
func NewTransportWithHost ¶
func NewTransportWithHost(host string) *TransportWithHost
NewTransportWithHost returns a new http.Transport that always uses the given host.
func WrapRoundTripperWithHost ¶
func WrapRoundTripperWithHost(parent http.RoundTripper, host string) *TransportWithHost
WrapRoundTripperWithHost wraps a http.RoundTripper that always uses the given host.