package api import ( "crypto/tls" "fmt" "net/http" "net/url" ) type ConfigParams struct { Host *url.URL UserAgent string Token *string Cookie *string TraceId *string AllowInsecureTLS bool Debug bool } // NewAPIConfig builds a configuration tailored to the InfluxDB v2 API. func NewAPIConfig(params ConfigParams) *Configuration { clientTransport := http.DefaultTransport.(*http.Transport).Clone() clientTransport.TLSClientConfig = &tls.Config{InsecureSkipVerify: params.AllowInsecureTLS} apiConfig := NewConfiguration() apiConfig.Host = params.Host.Host apiConfig.Scheme = params.Host.Scheme apiConfig.UserAgent = params.UserAgent apiConfig.HTTPClient = &http.Client{Transport: clientTransport} if params.Token != nil && *params.Token != "" { apiConfig.DefaultHeader["Authorization"] = fmt.Sprintf("Token %s", *params.Token) } else if params.Cookie != nil && *params.Cookie != "" { apiConfig.DefaultHeader["Cookie"] = fmt.Sprintf("influxdb-oss-session=%s", *params.Cookie) } if params.TraceId != nil { // NOTE: This is circumventing our codegen. If the header we use for tracing ever changes, // we'll need to manually update the string here to match. // // The alternative is to pass the trace ID to the business logic for every CLI command, and // use codegen'd logic to set the header on every HTTP request. Early versions of the CLI // used that technique, and we found it to be error-prone and easy to forget during testing. apiConfig.DefaultHeader["Zap-Trace-Span"] = *params.TraceId apiConfig.DefaultHeader["influx-debug-id"] = *params.TraceId } apiConfig.Debug = params.Debug return apiConfig }