1. we want optionally to log the body (we don't want to log the body when we're fetching psiphon secrets or tor targets) 2. we want body logging to _also_ happen on error since this is quite useful to debug possible errors when accessing the API This diff adds the above functionality, which were previously described in https://github.com/ooni/probe/issues/1951. This diff also adds comprehensive testing.
		
			
				
	
	
		
			38 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package probeservices
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"fmt"
 | |
| 	"net/url"
 | |
| 	"strings"
 | |
| 
 | |
| 	"github.com/ooni/probe-cli/v3/internal/model"
 | |
| )
 | |
| 
 | |
| type urlListResult struct {
 | |
| 	Results []model.OOAPIURLInfo `json:"results"`
 | |
| }
 | |
| 
 | |
| // FetchURLList fetches the list of URLs used by WebConnectivity. The config
 | |
| // argument contains the optional settings. Returns the list of URLs, on success,
 | |
| // or an explanatory error, in case of failure.
 | |
| func (c Client) FetchURLList(ctx context.Context, config model.OOAPIURLListConfig) ([]model.OOAPIURLInfo, error) {
 | |
| 	query := url.Values{}
 | |
| 	if config.CountryCode != "" {
 | |
| 		query.Set("country_code", config.CountryCode)
 | |
| 	}
 | |
| 	if config.Limit > 0 {
 | |
| 		query.Set("limit", fmt.Sprintf("%d", config.Limit))
 | |
| 	}
 | |
| 	if len(config.Categories) > 0 {
 | |
| 		query.Set("category_codes", strings.Join(config.Categories, ","))
 | |
| 	}
 | |
| 	var response urlListResult
 | |
| 	err := c.APIClientTemplate.WithBodyLogging().Build().GetJSONWithQuery(ctx,
 | |
| 		"/api/v1/test-list/urls", query, &response)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 	return response.Results, nil
 | |
| }
 |