(proxy DownloadProxyConfig)
| 408 | } |
| 409 | |
| 410 | func buildDownloadProxyURL(proxy DownloadProxyConfig) (*url.URL, error) { |
| 411 | proxyType := strings.TrimSpace(proxy.Type) |
| 412 | proxyHost := strings.TrimSpace(proxy.URL) |
| 413 | if proxyType == "" || proxyHost == "" { |
| 414 | return nil, buserr.New("ErrWgetProxyNotConfigured") |
| 415 | } |
| 416 | if !strings.Contains(proxyHost, "://") { |
| 417 | proxyHost = fmt.Sprintf("%s://%s", proxyType, proxyHost) |
| 418 | } |
| 419 | parsedURL, err := url.Parse(proxyHost) |
| 420 | if err != nil { |
| 421 | return nil, buserr.WithDetail("ErrWgetProxyInvalid", err.Error(), err) |
| 422 | } |
| 423 | if parsedURL.Scheme == "" { |
| 424 | parsedURL.Scheme = proxyType |
| 425 | } |
| 426 | if parsedURL.Host == "" && parsedURL.Path != "" { |
| 427 | parsedURL.Host = parsedURL.Path |
| 428 | parsedURL.Path = "" |
| 429 | } |
| 430 | if parsedURL.Host == "" { |
| 431 | return nil, buserr.New("ErrWgetProxyNotConfigured") |
| 432 | } |
| 433 | if strings.TrimSpace(proxy.Port) != "" && parsedURL.Port() == "" { |
| 434 | parsedURL.Host = net.JoinHostPort(parsedURL.Hostname(), strings.TrimSpace(proxy.Port)) |
| 435 | } |
| 436 | if proxy.User != "" && proxy.Password != "" { |
| 437 | parsedURL.User = url.UserPassword(proxy.User, proxy.Password) |
| 438 | } else if proxy.User != "" { |
| 439 | parsedURL.User = url.User(proxy.User) |
| 440 | } |
| 441 | return parsedURL, nil |
| 442 | } |
| 443 | |
| 444 | func newDownloadHTTPClient(options DownloadOptions) (*http.Client, error) { |
| 445 | if !options.IgnoreCertificate && options.Proxy == nil { |
no test coverage detected