Documentation
¶
Overview ¶
Package httpclient bounds an API client's requests to its configured origin.
Example ¶
package main
import (
"context"
"errors"
"fmt"
"net/http"
"github.com/Tangerg/scope/core/httpclient"
)
func main() {
ctx := context.Background()
host := &http.Client{}
client, err := httpclient.New(ctx, httpclient.Config{
HTTPClient: host,
BaseURL: "https://api.example/v1",
})
if err != nil {
panic(err)
}
redirect, err := http.NewRequestWithContext(ctx, http.MethodGet, "https://api.example:9443/result", nil)
if err != nil {
panic(err)
}
err = client.CheckRedirect(redirect, nil)
fmt.Println("independent client:", client != host)
fmt.Println("host transport unchanged:", host.Transport == nil)
fmt.Println("other port rejected:", errors.Is(err, httpclient.ErrOriginNotAllowed))
}
Output: independent client: true host transport unchanged: true other port rejected: true
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ErrOriginNotAllowed = errors.New("httpclient: request origin is not authorized")
ErrOriginNotAllowed prevents an API credential or request body from reaching an origin other than the one configured by its owner.
Functions ¶
func New ¶
New copies the client value before applying origin restrictions, so SDK initialization and redirect policy changes cannot mutate the host's client. The host retains ownership of the shared transport and cookie jar. Its redirect policy runs before the final destination and authority checks.
Types ¶
type Config ¶
type Config struct {
// A nil Transport, including a typed nil, uses http.DefaultTransport.
HTTPClient *http.Client
BaseURL string
// RejectRedirects binds resource-scoped requests to the original URL, even
// when a same-origin server redirects to a different tenant or resource.
RejectRedirects bool
}
Click to show internal directories.
Click to hide internal directories.