Files
go-garth/fix.md
2025-09-02 06:52:24 -07:00

62 lines
1.8 KiB
Markdown

High Priority (Fix These First):
Fix MFA Response Handling:
gofunc (a *GarthAuthenticator) authenticate(/* params */) (*Token, error) {
// ... existing code ...
if resp.StatusCode == http.StatusPreconditionFailed {
body, err := io.ReadAll(resp.Body)
if err != nil {
return nil, fmt.Errorf("failed to read MFA challenge: %w", err)
}
return a.handleMFA(ctx, username, password, mfaToken, string(body))
}
// ... rest of method
}
Create Complete Client Factory:
go// Add to garth.go
func NewGarminClient(ctx context.Context, username, password, mfaToken string) (*GarminClient, error) {
storage := NewMemoryStorage()
auth := NewAuthenticator(ClientOptions{
Storage: storage,
TokenURL: "https://connectapi.garmin.com/oauth-service/oauth/token",
Timeout: 30 * time.Second,
})
token, err := auth.Login(ctx, username, password, mfaToken)
if err != nil {
return nil, err
}
transport := NewAuthTransport(auth.(*GarthAuthenticator), storage, nil)
httpClient := &http.Client{Transport: transport}
apiClient := NewAPIClient("https://connectapi.garmin.com", httpClient)
return &GarminClient{
Activities: NewActivityService(apiClient),
Profile: NewProfileService(apiClient),
Workouts: NewWorkoutService(apiClient),
}, nil
}
Add Integration Test:
go//go:build integration
// +build integration
func TestRealGarminFlow(t *testing.T) {
client, err := NewGarminClient(ctx, username, password, "")
require.NoError(t, err)
// Test actual API calls
profile, err := client.Profile.Get(ctx)
require.NoError(t, err)
require.NotEmpty(t, profile.UserID)
activities, err := client.Activities.List(ctx, ActivityListOptions{Limit: 5})
require.NoError(t, err)
}