Files

48 lines
1.4 KiB
Go

package etsy
import (
"context"
"fmt"
"net/http"
"ruben/inventory2/domains/platforms/etsy/generated_client"
)
func newFixedAccessTokenClient(apiKey, accessToken string) (*generated_client.ClientWithResponses, error) {
return newAuthenticatingClient(apiKey, func(ctx context.Context) (string, error) {
return accessToken, nil
})
}
func newAccessTokenRefreshingClient(apiKey string) (*generated_client.ClientWithResponses, error) {
return newAuthenticatingClient(apiKey, func(ctx context.Context) (string, error) {
// TODO: look up the token in the db.
return "", nil
})
}
func newAuthenticatingClient(apiKey string, getAccessToken func(context.Context) (string, error)) (*generated_client.ClientWithResponses, error) {
var setAuthHeaders generated_client.ClientOption = func(c *generated_client.Client) error {
c.RequestEditors = append(c.RequestEditors, generated_client.RequestEditorFn(func(ctx context.Context, req *http.Request) error {
accessToken, err := getAccessToken(req.Context())
if err != nil {
return err
}
h := req.Header
h.Set("x-api-key", apiKey)
h.Set("Authorization", fmt.Sprintf("Bearer %s", accessToken))
return nil
}))
return nil
}
c, err := generated_client.NewClientWithResponses("https://api.etsy.com", setAuthHeaders)
if err != nil {
return nil, fmt.Errorf("failed to initialize open api client: %w", err)
}
return c, nil
}