Documentation
¶
Overview ¶
Package httpclient provides HTTP client utilities with DNS caching and security features for federation requests.
Package httpclient provides HTTP clients for federation with SSRF protection
Index ¶
- Variables
- func NewSecureHTTPClient(opts ...Option) *http.Client
- type FederationClient
- func (fc *FederationClient) Close()
- func (fc *FederationClient) Get(ctx context.Context, url string) (*http.Response, error)
- func (fc *FederationClient) GetClient() *http.Client
- func (fc *FederationClient) GetWithUserAgent(ctx context.Context, url, userAgent string) (*http.Response, error)
- func (fc *FederationClient) Post(ctx context.Context, url string, contentType string, body []byte) (*http.Response, error)
- func (fc *FederationClient) SetTimeout(timeout time.Duration)
- type FederationClientConfig
- type Option
- type SecureClient
- func (c *SecureClient) Do(req *http.Request) (*http.Response, error)
- func (c *SecureClient) Get(url string) (*http.Response, error)
- func (c *SecureClient) GetWithContext(ctx context.Context, url string) (*http.Response, error)
- func (c *SecureClient) Head(url string) (*http.Response, error)
- func (c *SecureClient) Post(url string, contentType string, body io.Reader) (*http.Response, error)
- func (c *SecureClient) PostWithContext(ctx context.Context, url string, contentType string, body io.Reader) (*http.Response, error)
Constants ¶
This section is empty.
Variables ¶
var ( // ErrBlockedRequest indicates the request was blocked for security reasons ErrBlockedRequest = errors.New("request blocked for security reasons") // ErrPrivateIPAddress indicates the target resolves to a private IP ErrPrivateIPAddress = errors.New("private IP address not allowed") // ErrInvalidScheme indicates an unsupported URL scheme ErrInvalidScheme = errors.New("invalid URL scheme") // ErrRedirectBlocked indicates a redirect was blocked ErrRedirectBlocked = errors.New("redirect blocked") // ErrDNSRebindingDetected indicates a DNS rebinding attack was detected ErrDNSRebindingDetected = errors.New("DNS rebinding attack detected") )
Functions ¶
func NewSecureHTTPClient ¶
NewSecureHTTPClient returns an *http.Client configured with the same SSRF protections as NewSecureClient. Prefer NewSecureClient when you don't specifically need an *http.Client.
Types ¶
type FederationClient ¶
type FederationClient struct {
// contains filtered or unexported fields
}
FederationClient provides a secure HTTP client for ActivityPub federation
func NewFederationClient ¶
func NewFederationClient(config *FederationClientConfig, logger *zap.Logger) *FederationClient
NewFederationClient creates a new secure HTTP client for ActivityPub federation
func (*FederationClient) Close ¶
func (fc *FederationClient) Close()
Close closes any idle connections
func (*FederationClient) GetClient ¶
func (fc *FederationClient) GetClient() *http.Client
GetClient returns the underlying HTTP client (use carefully)
func (*FederationClient) GetWithUserAgent ¶
func (fc *FederationClient) GetWithUserAgent(ctx context.Context, url, userAgent string) (*http.Response, error)
GetWithUserAgent performs a GET request with custom user agent
func (*FederationClient) Post ¶
func (fc *FederationClient) Post(ctx context.Context, url string, contentType string, body []byte) (*http.Response, error)
Post performs a POST request with ActivityPub headers
func (*FederationClient) SetTimeout ¶
func (fc *FederationClient) SetTimeout(timeout time.Duration)
SetTimeout updates the client timeout
type FederationClientConfig ¶
type FederationClientConfig struct {
Timeout time.Duration
MaxRedirects int
UserAgent string
AllowInsecureTLS bool
AllowPrivateNetworks bool
MaxResponseSize int64
DNSTimeout time.Duration
}
FederationClientConfig defines configuration for the federation client
func DefaultFederationClientConfig ¶
func DefaultFederationClientConfig() *FederationClientConfig
DefaultFederationClientConfig returns default configuration
type Option ¶
type Option func(*SecureClient)
Option is a functional option for configuring SecureClient
func WithMaxRedirects ¶
WithMaxRedirects sets the maximum number of redirects to follow
func WithStorage ¶
func WithStorage(store core.RepositoryStorage) Option
WithStorage sets the storage backend for DNS caching
type SecureClient ¶
type SecureClient struct {
// contains filtered or unexported fields
}
SecureClient is an HTTP client with SSRF protections
func DefaultClient ¶
func DefaultClient() *SecureClient
DefaultClient returns a pre-configured secure client with sensible defaults
func NewSecureClient ¶
func NewSecureClient(opts ...Option) *SecureClient
NewSecureClient creates a new secure HTTP client with SSRF protections
func (*SecureClient) Get ¶
func (c *SecureClient) Get(url string) (*http.Response, error)
Get performs a GET request with security checks
func (*SecureClient) GetWithContext ¶
GetWithContext performs a GET request with context
func (*SecureClient) Head ¶
func (c *SecureClient) Head(url string) (*http.Response, error)
Head performs a HEAD request with security checks