aboutsummaryrefslogtreecommitdiff
path: root/backend/internal/ibd/client.go
diff options
context:
space:
mode:
Diffstat (limited to 'backend/internal/ibd/client.go')
-rw-r--r--backend/internal/ibd/client.go25
1 files changed, 15 insertions, 10 deletions
diff --git a/backend/internal/ibd/client.go b/backend/internal/ibd/client.go
index 2b91268..25c5173 100644
--- a/backend/internal/ibd/client.go
+++ b/backend/internal/ibd/client.go
@@ -20,8 +20,8 @@ type Client struct {
}
func NewClient(
- transports []transport.Transport,
cookies database.CookieSource,
+ transports ...transport.Transport,
) *Client {
return &Client{transports, cookies}
}
@@ -55,12 +55,17 @@ func (c *Client) getCookie(ctx context.Context, subject *string) (uint, *http.Co
return cookie.ID, cookie.ToHTTPCookie(), nil
}
-func (c *Client) Do(req *http.Request) (*http.Response, error) {
- return c.DoWithStatus(req, []int{http.StatusOK})
-}
+func (c *Client) Do(req *http.Request, opts ...optionFunc) (*http.Response, error) {
+ o := defaultOptions
+ for _, opt := range opts {
+ opt(&o)
+ }
+
+ // Sort and filter transports by properties
+ transports := transport.FilterTransports(c.transports, o.requiredProps)
+ transport.SortTransports(transports)
-func (c *Client) DoWithStatus(req *http.Request, expectedStatus []int) (*http.Response, error) {
- for i, tp := range c.transports {
+ for _, tp := range transports {
resp, err := tp.Do(req)
if errors.Is(err, transport.ErrUnsupportedRequest) {
// Skip unsupported transport
@@ -68,17 +73,17 @@ func (c *Client) DoWithStatus(req *http.Request, expectedStatus []int) (*http.Re
}
if err != nil {
slog.ErrorContext(req.Context(), "transport error",
- "transport", i,
+ "transport", tp.String(),
"error", err,
)
continue
}
- if slices.Contains(expectedStatus, resp.StatusCode) {
+ if slices.Contains(o.expectedStatuses, resp.StatusCode) {
return resp, nil
} else {
slog.ErrorContext(req.Context(), "unexpected status code",
- "transport", i,
- "expected", expectedStatus,
+ "transport", tp.String(),
+ "expected", o.expectedStatuses,
"actual", resp.StatusCode,
)
continue